>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
TypeScript

Como Tornar o Scroll do Site Realmente Suave Sem Quebrar a Acessibilidade

Você já visitou algum site onde o scroll parece "melado" ou, ao contrário, muito abrupto? Designers adoram scroll suave porque ele adiciona polimento e uma sensação premium à interface. Mas para desenvolvedores, frequentemente vira um pesadelo: bibliotecas padrão de scroll suave frequentemente quebram navegação nativa, conflitam com position: sticky, ou fazem o navegador sofrer com baixa taxa de quadros.

Recentemente encontrei o Lenis da equipe darkroom.engineering. Essas pessoas abordaram o problema de forma diferente: em vez de substituir completamente o comportamento do navegador, eles criaram uma camada leve que funciona sobre o scroll nativo.

Qual é o Problema Principal com Bibliotecas Comuns

A maioria das ferramentas de scroll suave simplesmente "desabilita" o scroll padrão e tenta imitá-lo através de transforms (transforms CSS). Isso faz com que coisas como foco de teclado, busca na página (Cmd+F) e funcionalidade de leitores de tela quebrem.

Lenis (do latim — "suave") preserva o scroll nativo. Isso significa que seu anchor links funcionará, e o navegador ainda entenderá exatamente onde o usuário está na página. Além disso, a biblioteca tem apenas alguns kilobytes e não arrasta junto um monte de dependências.

O que o Lenis Pode Fazer

A biblioteca resolve vários pontos dolorosos dos desenvolvedores frontend de uma vez.

Sincronização com WebGL e Animações

Se você está construindo efeitos complexos de parallax ou vinculando scroll a canvas (WebGL), você precisa de uma única fonte de verdade para a posição do scroll. Lenis funciona perfeitamente com GSAP ScrollTrigger. Na minha experiência, essa é a forma mais estável de evitar que elementos "tremam" durante scroll rápido.

Trabalhando com Qualquer Eixo

Você pode configurar suavidade para scroll vertical, horizontal ou até mesmo aninhado. O último é especialmente interessante: frequentemente você precisa que a página principal role suavemente enquanto algum bloco modal dentro dela vive sua própria vida.

Suporte a Frameworks

Embora eu prefira vanilla JS para coisas assim, o projeto tem adaptadores oficiais para React, Vue e até Framer. Isso economiza tempo passando refs e gerenciamento de ciclo de vida de componentes.

Como Começar

A instalação é padrão:

npm i lenis

A inicialização básica é tão simples quanto possível. Você pode habilitar o loop de animação automático (autoRaf) para não ter que mexer com requestAnimationFrame manualmente:

import Lenis from 'lenis'
import 'lenis/dist/lenis.css'

const lenis = new Lenis({
  autoRaf: true,
});

// Можно подписаться на события, если нужно обновлять свои анимации
lenis.on('scroll', (e) => {
  console.log('Текущая позиция:', e.scroll);
});

Se você está usando GSAP (e para sites legais, é o padrão de fato), a integração será um pouco mais complexa, mas mais confiável:

const lenis = new Lenis();

lenis.on('scroll', ScrollTrigger.update);

gsap.ticker.add((time) => {
  lenis.raf(time * 1000);
});

gsap.ticker.lagSmoothing(0);

Pequenos Detalhes e Limitações

Apesar de ser muito legal, Lenis tem suas peculiaridades. Por exemplo, no Safari, as atualizações de taxa de quadros podem ser limitadas a 60 FPS (ou até 30 FPS em modo de baixo consumo), o que às vezes pode ser perceptível em monitores de alta taxa de atualização.

Outra coisa — iframe. Scroll dentro de iframes não será suave, pois eles não propagam eventos de roda do mouse para fora. Esta é uma restrição de segurança do navegador, e a biblioteca não pode fazer nada sobre isso.

Se você tem elementos na página que devem rolar normalmente (como um campo de texto ou menu suspenso), use o atributo data-lenis-prevent. Isso vai te salvar de comportamento estranho da interface.

Vale a Pena Implementar

Se você está construindo uma landing page, portfólio ou site promocional onde a estética importa — definitivamente sim. Lenis te dá aquele efeito "caro" sem comprometer a acessibilidade.

Para dashboards pesados ou painéis de administração com toneladas de tabelas, eu provavelmente seguraria. Lá, uma camada extra de abstração sobre o scroll só pode atrapalhar os usuários navegando rapidamente pelos dados.

No geral, é uma das ferramentas mais limpas e com melhor desempenho em sua categoria hoje. Confira o Showcase deles — tem exemplos verdadeiramente impressionantes de como um scroll comum se torna parte da narrativa visual.

Projetos relacionados