Mihai Rotaru
Mihai Rotaru

Reputation: 1973

How to combine Raphael animations?

The idea is to have two Raphael objects moving together, while one of them is rotating. In the example below, I created two animations - one for the translation, and one for rotation, but I didn't have any luck getting them to work.

var paper = Raphael(0,0,800,400);
var body  = paper.rect(10,10,50,30);
var leg   = paper.rect(30,35,10,30);

// translation - should be applied to both body and leg
var translation_anim = Raphael.animation( {transform: "t300,0"}, 2000 );

// rotation - to be applied to the leg only
var rotation_anim = Raphael.animation( {
    "50%":  { transform: "R" +    (45).toString() },
    "100%": { transform: "R" + (-1*45).toString() }
}, 2000);

body.animate(translation_anim);
leg.animateWith(body,rotation_anim,translation_anim);

Fiddle: http://jsfiddle.net/hx22d/

Upvotes: 1

Views: 353

Answers (1)

rohan_vg
rohan_vg

Reputation: 1129

Fiddle: http://jsfiddle.net/hx22d/4/

Here is the updated code:

var paper = Raphael(0,0,800,400);
var body  = paper.rect(10,10,50,30);
var leg   = paper.rect(30,35,10,30);

var translation_anim = Raphael.animation({transform: "t300,0"}, 2000);

var rotation_anim = Raphael.animation({
    "50%": { transform: "r45 T150,0"},
    "100%": { transform: "r-45 T300,0"}
}, 2000);

body.animate(translation_anim);
leg.animateWith(body,translation_anim,rotation_anim);

There was a small syntax error in you code on the last line.

leg.animateWith(body, rotation_anim, translation_anim)


The correct syntax according to Raphael.js documentation is:

element.animateWith(element_to_sync_with, animation_to_sync_with, animation)

-> leg.animateWith(body, translation_anim, rotation_anim)

Hope this helps.

Upvotes: 1

Related Questions