Wednesday, November 12, 2008

Lien sur animation

La question abordée ici est celle des liens d'une page SVG vers une autre page.

An english version of this article is available:
http://svgmpeg4.blogspot.com/2008/11/link-and-animation.html

La méthode de base est d'entourer un ensemble de primitives graphiques par une balise <a ...>, analogue à la balise <a ...> du html. Cela permet par exemple de passer d'une page à une autre sur un clic sur n'importe quelle partie du groupe de primitives ancadrées par le <a>.

Mais, cherchons à aller plus loin: un clic sur un élément déclenche une animation et, à la fin de cette animation, on passe à une autre page SVG.

Rien ne permet cela de façon directe.

Associé à l'élément animé d'id 'anim1', je vais ajouter l'élément suivant:
<ev:listener target='anim1' event='endEvent' handler='#versAutreSVG' />

Ainsi, quand l'évènement de fin d'animation va être généré, le handler nommé 'versAutreSVG' va être exécuté.

Le handler peut être défini ainsi:
<handler xml:id='versChambre' type="application/ecmascript">
gotoLocation('autrePage.svg');
</handler>

Il y a potentiellement une autre méthode qui serait envisageable dans le futur. Elle est correcte syntaxiquement, mais son fonctionnement n'est pas spécifié par la norme actuelle (même dans le projet Tiny 1.2). Peut-être pourra-t-on l'introduire par la suite. Il en résulte que des afficheurs SVG différents pourraient avoir un comportement différent.

Supposons qu'on a
<ev:listener event='endEvent' handler='#versAutreSVG' />

comme précédemment. Mais que l'objet d'id versAutrePage, n'est pas un handler classique mais:
<a id='versAutrePage' xlink:href='autrePage.svg' />
Cette syntaxe est correcte dans SVG Tiny 1.2, mais le comportement de la balise <a> en tant que cible de l'évènement n'est pas défini. Il suffirait de définir que si une balise a est la cible d'un évènement, on suit le lien défini par la balise.

Peut-être pour une prochaine version de la spécification SVG?

No comments: