javascript - descargar - raphael js examples
Cómo usar Raphael.animateWith() (1)
¿Alguien ha usado .animateWith()
en Raphael para mantener exitosamente animaciones rápidas sincronizadas? Está mal documentado. El creador de la biblioteca tiene una demostración de video pero no hay código que pueda encontrar.
Tengo un metrónomo de Javascript que consiste en una línea (el brazo del metrónomo) y un "peso" de forma trapezoidal que eventualmente se moverá hacia arriba y hacia abajo para indicar el tempo. Tengo un violín que funciona aquí , y las líneas en cuestión son:
var ticktock = Raphael.animation({
"50%": { transform:"R20 " + x + "," + y, easing: "sinoid", callback: function() { tick(this, repeats, done); }},
"100%": { transform:"R-20 " + x + "," + y, easing: "sinoid", callback: function() { tick(this, repeats, done); }}
}, interval).repeat(repeats / 2);
arm.animate(ticktock);
weight.animateWith(arm, ticktock, ticktock);
Si revisas el violín y le das un ritmo alto y unas 20 garrapatas, deberías ver el retraso de peso detrás del brazo. (Por favor, inténtelo algunas veces si no es así - Murphy''s Law, etc.). Pensé que esto era precisamente lo que animateWith () previno. Tal vez lo estoy usando incorrectamente.
Si observa la fuente de Raphael para la función .animateWith (), verá que sincroniza el parámetro .start de cada animación, FWIW.
De la documentación de Rafael :
Parámetros :
elemento - elemento [objeto] para sincronizar con
anim - animación [objeto] para sincronizar con
animación - objeto de animación [objeto], ver Raphael.animation
Así que creo que su código solo necesita separar la animación y pasarla a un segundo parámetro para .animateWith()
:
La porción de animación es justa:
{
"50%": { transform:"R20 " + x + "," + y, easing: "sinoid", callback: animationDone },
"100%": { transform:"R-20 " + x + "," + y, easing: "sinoid", callback: animationDone }
}
Entonces puedes hacer esto:
var animationDone = function() {
tick(this, repeats, done);
};
var ticktockAnimationParam = {
"50%": { transform:"R20 " + x + "," + y, easing: "sinoid", callback: animationDone },
"100%": { transform:"R-20 " + x + "," + y, easing: "sinoid", callback: animationDone }
};
var ticktock = Raphael.animation(ticktockAnimationParam, interval).repeat(repeats / 2);
arm.animate(ticktock);
weight.animateWith(arm, ticktockAnimationParam, ticktock);
Ver violín: http://jsfiddle.net/wDwsW/7/
Fyi, moví la función de devolución de llamada afuera, en lugar de usar funciones anónimas.