Bonjour à toutes et tous !

J'aimerais savoir si il est possible d'ajouter des animations au niveau d'un fichier SVG directement depuis illustrator, j'ai regardé du côté de l'Interactivité SVG mais apparemment c'est pas ça... en l’occurrence j'aimerai que effectuer une rotation (sans fin).

J'ai déjà essayé d'ajouter la rotation directement dans le code SVG mais malgré étude de plusieurs méthodes et copier-coller de codes existant ça ne fonctionne pas...

Je vous met le code SVG au cas où quelqu'un serait plus inspiré (avec explications si possibles)

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="1024px" height="768px" viewBox="0 0 1024 768" enable-background="new 0 0 1024 768" xml:space="preserve">
<path fill="#CCCCCC" d="M431.532,387.014c0-44.414,36.023-80.438,80.438-80.438c19.188,0,36.712,6.844,50.5,18.077l-31.627,30.097
    l99.945,11.367l0.805-107.242l-30.766,29.289C577.281,266.961,546.203,254,512.023,254C438.554,254,379,313.562,379,387.016
    c0,2.742,0.242-2.266,0.414,0.445l53.68,7.555C432.093,389.928,431.532,392.382,431.532,387.014z M642.71,382.194l-53.681-7.555
    c1.017,5.086,1.556,2.617,1.556,7.992c0,44.414-36.008,80.431-80.43,80.431c-19.133,0-36.602-6.798-50.383-17.97l31.595-30.078
    l-99.93-11.366l-0.812,107.25l30.789-29.312c23.531,21.141,54.57,34.055,88.688,34.055c73.468,0,133.023-59.555,133.023-133.008
    C643.125,379.897,642.875,384.905,642.71,382.194z" />
    <animateTransform
        attributeName="transform"
        begin="0s"
        dur="1s"
        type="rotate"
        from="0"
        to="360"
        repeatCount="indefinite"
    />
</svg>

C'est mon dernier essaie, avec ce code le tracé tourne en rond dans l'espace plutôt que de tourner sur lui-même.

Merci d'avance pour votre aide et bonne journée

MICKAEL

4 réponses


Swadon
Réponse acceptée

Bonsoir !

Désolé pour la réponse assez tardive mais je vous la soumets malgré tout... (peut-être que ça servira à d'autres)

J'ai utilisé du JavaScript directement inclus dans le fichier SVG.

Voilà comment j'ai procédé brièvement :

  • Je récupère l'icône dans une variable pour pouvoir la manipuler plus tard.

  • J'applique un intervalle très court qui appelle une fonction de rotation.

  • Dans cette fonction en question, je définis l'origine de mon icône.

  • Puis j'applique une rotation en degrés.

  • Je stocke le degré de rotation dans une variable en l'incrémentant de 1 (ou en la réinitialisant à 0 si elle vaut 360 degrés).

En espérant avoir été assez clair, le code est lui aussi commenté.

Démonstration : http://jsfiddle.net/d9JdJ/

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg onload="init(evt)" version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="1024px" height="768px" viewBox="0 0 1024 768" enable-background="new 0 0 1024 768" xml:space="preserve">
 <script type="text/javascript"><![CDATA[
        // On initialise le degré de la rotation à 0
    var deg = 0;
        // Fonction d'initialisation
    function init(evt) {
            // On récupère le document SVG
        if ( window.svgDocument == null )
            svgDocument = evt.target.ownerDocument;
            // Puis l'icône
        var icon = svgDocument.getElementById("reload");
            // On effectue l'animation de rotation avec un délais très court
        setInterval(function() { rotate(icon); }, 15);
    }
        // Fonction de rotation
    function rotate(el) {
            // On définit l'origine d'icône qui servira à la rotation
        el.style.webkitTransformOrigin = 'center center';
        el.MozTransformOrigin = 'center center';
            // On applique la rotation en degré (avec préfixage suivant les navigateurs)
        el.style.webkitTransform = 'rotate('+ deg +'deg)';
        el.style.mozTransform = 'rotate('+ deg +'deg)';
        el.style.msTransform = 'rotate('+ deg +'deg)';
        el.style.oTransform = 'rotate('+ deg +'deg)';
        el.style.transform = 'rotate('+ deg +'deg)';
            // On incrémente la rotation par pas de 1, tout en veillant à réinitialiser la variable à 0 si 360 degrés sont atteints
        (deg == 360) ? deg = 0 : deg += 1;
    }
    ]]></script>
<path id="reload" fill="#CCCCCC" d="M431.532,387.014c0-44.414,36.023-80.438,80.438-80.438c19.188,0,36.712,6.844,50.5,18.077l-31.627,30.097
    l99.945,11.367l0.805-107.242l-30.766,29.289C577.281,266.961,546.203,254,512.023,254C438.554,254,379,313.562,379,387.016
    c0,2.742,0.242-2.266,0.414,0.445l53.68,7.555C432.093,389.928,431.532,392.382,431.532,387.014z M642.71,382.194l-53.681-7.555
    c1.017,5.086,1.556,2.617,1.556,7.992c0,44.414-36.008,80.431-80.43,80.431c-19.133,0-36.602-6.798-50.383-17.97l31.595-30.078
    l-99.93-11.366l-0.812,107.25l30.789-29.312c23.531,21.141,54.57,34.055,88.688,34.055c73.468,0,133.023-59.555,133.023-133.008
    C643.125,379.897,642.875,384.905,642.71,382.194z" />
</svg>

Sur ce, bonne soirée !

Fabien.

Merci Fabien pour la réponse, effectivement entre temps j'ai fait autrement, je me suis tourné vers le bon vieux GIF... :-)

Mais ta solution est tout de même très intéressante et je la garde sous le coude.

salut Soundboy39, je suis un débutant en matière d'animation SVG et j'aimerais savoir comment générer le code svg "exactement" comme tu as fait stp. Pourrais-tu m'aider en ce sens?

Bonjour jean michel.

Pour générer du svg il y'a plusieurs solutions :
1 - Dans illustrator CC tu peux directement faire un copier coller de ta forme dans ton sublime text (par exemple).
2 - Dans illustrator toujours, tu peux enregistrer ton fichier au format svg puis l'ouvrir dans sublime text par exemple.
3 - Dernière solution que je te recommande, tu enregistres depuis illustrator en .svg, puis tu passes ton svg dans https://github.com/svg/svgo-gui ou encore via l'outil en ligne https://jakearchibald.github.io/svgomg/ ceci a pour effet de cleaner ton fichier et de ne garder que l'essentiel, ainsi ton svg sera plus lisible et maintenable... J'espère t'avoir aidé.