27/07/2023

Scroll-driven animations

Por que essa API Ć© tĆ£o importante?

Ela resolve por inteiro os principais problemas atuais com animaƧƵes vinculadas a scroll:

  • AnimaƧƵes rodando na thread principal
  • Navegadores modernos realizam a rolagem em um processo separado e, portanto, entregam eventos de rolagem de forma assĆ­ncrona.

Esses problemas sĆ£o muito relevantes, pois a maioria, senĆ£o todas, as bibliotecas de animaĆ§Ć£o com rolagem dependem de pelo menos um dos pontos apresentados. AlĆ©m de explicar o problema, acho importante entender o impacto que esses problemas causam no usuĆ”rio final, e a palavra-chave Ć© PERFORMANCE. Os desenvolvedores web estĆ£o cada vez mais empenhados em melhorar o desempenho de suas aplicaƧƵes, e nĆ£o poder realizar animaƧƵes comuns em aplicativos nativos (iOS / Android) sem consumir uma grande quantidade de poder computacional Ć© problemĆ”tico.

Exemplo de uma implementaĆ§Ć£o com JS :

https://codepen.io/nyb1030/full/gOBvZgR


Ɖ bem perceptĆ­vel o quĆ£o rapidamente isso pode se tornar um problema de UX (experiĆŖncia do usuĆ”rio) para a sua aplicaĆ§Ć£o.

Como foi feita essa API?

Essa API foi desenvolvida utilizando como base duas APIs jĆ” existentes, que sĆ£o a Web Animations API (WAAPI) e a API de AnimaƧƵes CSS (CSS Animations API), permitindo assim animaƧƵes acionadas por rolagem de forma declarativa.

Isso torna possĆ­vel as melhorias mencionadas anteriormente.

Image

Como posso utilizar essa API?

Com esse Exemplo de animaĆ§Ć£o simples e rapida, sĆ£o necessarios somente esse html:

<body>

<div id="progress"></div>

ā€¦

</body>

E esse CSS:

@keyframes grow-progress {

from { transform: scaleX(0); }

to { transform: scaleX(1); }

}

#progress {

position: fixed;

left: 0;

top: 0;

width: 100%;

height: 1em;

background: red;

transform-origin: 0 50%;

animation: grow-progress auto linear;

animation-timeline: scroll();

}

Tendo como novidade a propriedade animation-timeline: scroll();

Propriedades:


Defina a linha do tempo que controlarĆ” o progresso de uma animaĆ§Ć£o e defina o intervalo de anexaĆ§Ć£o ao longo dessa linha do tempo:
Define timelines de progresso de rolagem com nomes:
Define timelines de progresso de visualizaĆ§Ć£o com nomes:
Modificar o escopo da linha do tempo:

Exemplos

Importante ressaltar que esses sĆ£o alguns links que eu acho que mostram grande parte do poder dessa API.

https://scroll-driven-animations.style/

Nesse link acima existem outras dezenas de implementaƧƵes.

Se quiser faƧa a sua e me mande o link pelo Instagram @luccaparadeda.

Referencias: