Con JavaScript possiamo creare le nostre animazioni senza utilizzare una libreria.
Possiamo implementare la seguente soluzione:
// Funzione helper
var extend = function( target, source ) {
var a = Object.create( target );
Object.keys( source ).map(function ( prop ) {
prop in a && ( a[prop] = source[prop] );
});
return a;
};
// Animazione
var animate = function( opts ) {
var defaults = {
delay: 10, // Ritardo
duration: 1000, // Durata complessiva
easing: function( p ) { // Funzione di easing
return p; // Easing lineare predefinito
},
step: function( d ) {} // Ad ogni iterazione la modifica della proprietà CSS
};
opts = extend( defaults, opts );
var start = new Date(); // Tempo iniziale
var id = setInterval(function() {
var timePassed = new Date() - start; // Tempo trascorso
var progress = timePassed / opts.duration; // Avanzamento: da 0 a 1
if( progress > 1 ) {
progress = 1;
}
var delta = opts.easing( progress ); // Valore di easing
opts.step( delta ); // Modifica del valore della proprietà CSS
if( progress == 1 ) {
clearInterval( id );
}
}, opts.delay || 10);
};