Interesante artículo en el que nos muestra, en pocos pasos y mucho código como crear nuestro propio framework Javascript destinado a trabajar con animaciones. Ideal para los que queremos minimizar nuestro código Javascript eliminando esos KB que los frameworks nos incluyen
// Definimos el constructor
function Effect(opt) {
this.opt = {
element: opt.element,
duration: opt.duration || 1000,
fps: opt.fps || 40,
onComplete: opt.onComplete || function(){}
};
}
Effect.compute = function(from, to, delta) {
return from + (to - from) * delta;
};
// Métodos de la clase
Effect.prototype = {
start: function(props) {
if(this.timer) return;
var that = this, fps = this.opt.fps;
this.time = +new Date;
this.timer = setInterval(function() { that.step(props); },
Math.round(1000/fps));
},
step: function(props) {
var currentTime = +new Date, time = this.time, opt = this.opt;
if(currentTime < time + opt.duration) {
var delta = (currentTime - time) / opt.duration;
this.setProps(opt.element, props, delta);
} else {
this.timer = clearInterval(this.timer);
this.setProps(opt.element, props, 1);
opt.onComplete();
}
},
setProps: function(elem, props, delta) {
var style = elem.style;
for(var prop in props) {
var values = props[prop];
style[prop] = Effect.compute(values[0], values[1], delta)
+ (values[2] || '');
}
}
};
Y para usarla, simplemente tendremos que definir las nuevas propiedades del elemento al que le queremos aplicar el efecto.
var elem = document.getElementById("myElementId");
var fx = new Effect({
element: elem,
duration: 1000
});
fx.start({
'width': [0, 20, 'px'],
'height': [0, 5, 'em']
});
Y listo, ya tenemos efecto. No he probado a encadenar efectos, pero debería funcionar, permitiendo conseguir animaciones interesantes.
3 comentarios, 2 referencias
+
#