Comunidad de diseño web y desarrollo en internet online

Scroll easing casi perfecto

Citar            
MensajeEscrito el 22 Mar 2010 03:47 pm
Hola A tod@s!!

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!!!

Por Mor

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2010 10:45 am
Vaya!!

Es una pena que la solución no sea tan fácil. Pero permitidme que os haga otra pregunta: ¿No habría alguna posibilidad de insertar a modo de parche o "trozo" :roll: un nuevo sistema de desaceleración mediante easing en este scroll?

Supongo que modificar un código ya hecho es condenadamente más complicado que crearlo desde 0.
Aunque si se pudiesen implementar los tipos de easing que hay en los tutoriales de estos foros sería genial. ^^
Y también me imagino que estoy volviendo a preguntar lo mismo desde otra perspectiva :? .... mi terquedad no tiene límites jejeje. En fin, muchísimas gracias de nuevo y espero que podáis echarme un cable en esto.

Saludos!!

Por Mor

11 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.