D3.js animer une rotation
Je vais avoir des ennuis lorsque j'essaie d'exécuter correctement une rotation de l'animation à l'aide de la D3.js de la bibliothèque. Le problème a à voir avec le point que je veux faire tourner l'élément sur.
Ici est un violon j'ai fait pour montrer ce que je veux dire (au ralenti): http://jsfiddle.net/74mCb/
Il semble que la source du problème se trouve ici:
.attr("transform", "rotate(-60, 150,130)");
Puis-je la faire tourner comme suit:
.attr("transform", "rotate(40 150,130)");
Je voudrais le bout de l'aiguille pour rester en position (le centre de rotation), quelqu'un pourrait-il expliquer ce que je fais de mal?
Merci!
OriginalL'auteur frshca | 2012-11-09
Vous devez vous connecter pour publier un commentaire.
C'est un peu difficile à saisir (je ne comprends pas tout moi-même) mais D3 doit savoir comment interpoler entre les deux chaînes de caractères qui représentent votre rotation.
d
est le système de référence,i
est l'indice,a
est l'attribut dans le cas où vous voulez faire de cette piloté par les données.http://jsfiddle.net/SHF2M/
Wow, c'est un peu ennuyeux. Eh bien je vous remercie de me présenter .attrTween()!
OriginalL'auteur Duopixel
Voici ce que je pense qui se passe: par le SVG spec, la transformation
est équivalent à:
Il ressemble D3 est l'animation de la traduction ainsi que la rotation interne
d3.transform
représentation derotate(40 150,130)
est une rotation du composant + un module de traduction, de sorte que les deux sont inclus dans la période de transition.Le plus facile de résoudre ici est d'attirer votre aiguille à l'origine, de la traduire avec une enveloppe extérieure
g
élément à la position correcte, puis le faire pivoter:puis
Voir le travail de violon: http://jsfiddle.net/nrabinowitz/74mCb/1/
Ouais, la dernière solution (redessiner l'aiguille à l'origine) n'est pas seulement la plus simple et la plus élégante, c'est aussi le plus approprié. C'est ce que l'on ferait si l'animation de l'aiguille dans l'interface graphique de l'outil (Flash, 3D, éditeurs, etc).
OriginalL'auteur nrabinowitz