Antes de nada comentar que es "casi perfecto" para mi. Por supuesto cada cual necesitará scrolles distintos según sus necesidades, pero este es el que a mi más buenos resultados me está dando en cuanto a lo que busco.
Estuve mirando algunos tutoriales de scroll con easing que hay en esta comunidad como:
http://www.cristalab.com/tutoriales/crear-scrollbar-mas-efecto-de-easing-c135l/
http://www.cristalab.com/tips/como-crear-un-scrollbar-con-easing-en-flash-c44339l/
Pero me hacía falta algo que incluyese esing, actualización de scroll según el contenido, botones, movilidad con rueda del ratón y que el texo bitmap se vea nítido como si el scroll siempre se parase en una posición absoluta.
Encontré un tutorial en otros foros de Internet y modifiqué el .fla para adecuarlo a lo que yo quería.
Algo como esto:
Bien, lo que quería consultaros es si hay una forma de realizar un easing un pelin más suave, que tarde más en desacelerar. He tratado de hacerlo mediante los ajustes de velocidad en el AS del scroll, pero no consigo que desacelere pixel a pixel ( si se puede decir asi).
No sé si tiene que ver con la función de Math.ceil/random/floor y las variables que se le aplican a esta pero empiezo a tener la sensación de meterme en "camisa de 11 var.as" (perdón por el mal chiste).
Dejo también el código:
Código :
function scrollUpdate() { var contenido = this._parent.contenido; if (contenido._height<this.bg._height) { this._visible = false; } else { this._visible = true; } var pxls_cont = contenido._height-this.bg._height; var pxls_scroll = this.bg._height-this.barra._height; var alfa = pxls_cont/pxls_scroll; var vel = 2; var desty = -this.barra._y*alfa+this.hxini; desty = Math.floor(desty); contenido._y = Math.floor((contenido._y*vel+desty)/(vel+1)); } function startScroll() { yfin = this._parent.bg._height-this._height; this.startDrag("", this._x, 0, this._x, yfin); } function stopScroll() { this.stopDrag(); } function moveScroll(dir) { if (dir == "stop") { delete controlador["onEnterFrame"]; } else { var barra = this.barra; var vel = 4; if (dir == "arriba") { var lim = 0; vel = vel*-1; } else { var lim = this.bg._height-barra._height; } } controlador.onEnterFrame = function() { if (dir == "abajo") { if (barra._y+vel<lim) { barra._y = barra._y+vel; } else { barra._y = lim; } } else if (barra._y+vel>lim) { barra._y = barra._y+vel; } else { barra._y = lim; } }; } var wheel:Object = new Object(); wheel.onMouseWheel = function(incressment):Void { barra._y -= incressment*5; if (barra._y>190) { barra._y = 190; } if (barra._y<0) { barra._y = 0; } }; Mouse.addListener(wheel); this.hxini = this._parent.contenido._y; this.onEnterFrame = scrollUpdate; this.barra.onPress = startScroll; this.barra.onRelease = stopScroll; this.barra.onReleaseOutside = stopScroll; this.createEmptyMovieClip("controlador", 100); sup.onPress = function() { moveScroll("arriba"); }; sup.onRelease = inf.onRelease=function () { moveScroll("stop"); }; inf.onPress = function() { moveScroll("abajo"); }; inf.onRelease = function() { moveScroll("stop"); }; barra.useHandCursor = false; sup.useHandCursor = false; inf.useHandCursor = false;
Muchísimas gracias por la paciencia y sobretodo por vuestra magnífica labor desinteresada.
Saludos!!!