Skip to main content

Expressões para motion design

Coleção de expressões prontas para usar em projetos reais. Copie, cole, adapte.

Spinner de loading

// em Rotation de um Shape Layer circular:
time * 180 // meia volta por segundo
// com aceleração progressiva:
time * time * 30
// opacity que pisca a cada 0.5 segundos:
Math.floor(time * 2) % 2 == 0 ? 100 : 0
// versão suavizada:
(Math.sin(time * Math.PI * 2) + 1) / 2 * 100

Parallax com posição de nulo

// position que segue um nulo com mapeamento de faixa:
var v = thisComp.layer("Null 1").transform.position;
[linear(v[0], 0, thisComp.width, -50, 50),
linear(v[1], 0, thisComp.height, -30, 30)]

Audio-reactive via slider

// após Convert Audio to Keyframes, usa o nulo gerado:
var audio = thisComp.layer("Audio Amplitude").effect("Both Channels")("Slider");
[100 + audio * 2, 100 + audio * 2]

Números aleatórios estáveis (sem flickering)

random() muda a cada frame. Para valores que ficam fixos por layer:

seedRandom(index, true); // true = seed por layer, não por tempo
random(50, 200) // valor entre 50 e 200, estável

Layer que empurra outra

// layer B fica sempre à direita da layer A com espaçamento fixo:
var layerA = thisComp.layer("Layer A");
var espacamento = 20;
[layerA.transform.position[0] + layerA.sourceRectAtTime(time).width / 2 + espacamento,
layerA.transform.position[1]]

Texto que atualiza com data

// exibe a data atual no momento do render:
var d = new Date();
d.toLocaleDateString("pt-BR") // ex: "25/03/2026"

Bounce simples (versão curta)

freq = 3;
decay = 5;
n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0) {
t = time - key(n).time;
v = velocityAtTime(key(n).time - 0.001);
value + v * 0.07 * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t)
} else { value }

Manter posição na tela (screen space)

// layer que fica sempre no canto superior direito, independente da câmera:
// (requer Camera 3D ativa)
fromCompToSurface(thisComp.width - 100, 50, 0)