Travailler avec des expressions

La documentation sur les expressions nous indique que celles-ci sont partiellement supportées. Les fonctions telles que linear, velocityAtTime et wiggle ne sont pas supportées.

support du javaScript

Imaginons que nous souhaitions utiliser, plutôt que des variables d’After Effects telles que time, des éléments du navigateur ?

Avertissement

Je ne suis pas parvenu à trouver de solution satisfaisante sur ce point. Ce qui ne signifie pas que cela n’existe pas. Je vous expose donc ci-dessous le fruit de ma recherche.

échecs

“use javascript”

La documentation précise qu’il est possible d’utiliser la chaîne de caractère “use javascript” pour pouvoir utiliser du javascript : je n’ai obtenu aucun résultat de la sorte.

forcer l’ordre des choses

L’ajout de références à des variables non définies dans After Effects ou dans l’expression entraîne une erreur, et l’expression est alors ignorée.

Imaginons par exemple que master.js embarque le code suivant :

// on déclare notre variable
var pourcentage_largeur = 0;

document.body.addEventListener( 'mousemove', obtenir_pourcentage_largeur, false );

function obtenir_pourcentage_largeur ( evenement ) {
   /* calcul la position du curseur sur la vue sous forme de %
   et l'assigner à pourcentage_largeur */
   pourcentage_largeur = evenement.clientX / window.innerWidth * 100;
}

Nous souhaiterions utiliser cette valeur pour contrôler un paramètre de notre animation JavaScript. Mais si nous utilisons l’expression qui suit, nous aurons une erreur, et l’expression ne sera pas exportée.

// n'existe pas = erreur = pas d'export
pourcentage_largeur

Ici, cela ne fonctionnera pas. Par contre :

// la variable est déclaré = pas d'erreur = export
// mais la valeur sera toujours égale à 0…
var pourcentage_largeur = 0;
pourcentage_largeur

L’astuce va consister à ouvrir le fichier json, recherche la mention var pourcentage_largeur = 0; et à la supprimer. L’expression utilisera alors la valeur de l’objet globale, définie dans master.js et redéfinie à chaque frame.