JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll
Publicado em 23/07/2021 21h42
Visualizações: 347

Transformando a animação ao scroll em classe

Para este exemplo, será utilizado o conteúdo do projeto prático. Caso queira o montar em seu ambiente de desenvolvimento, leia o conteúdo do JS-0302 - JavaScript Completo ES6 - Início do Projeto Prático.

Para baixar o projeto, clique aqui.

Neste post, a função refatorada será a função "animationScroll", criada no post JS-0312 - JavaScript Completo ES6 - Animação ao Scroll, que controla a entrada dos conteúdos das seções na área visível do usuário de acordo com o movimento do scroll.

Código antigo, ativado no script.js através da função animationScroll:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

Este script será transformado em classe, como padrão, a exportação default passa a ser a classe, com nome em "CamelCase", tendo no construtor da classe os parâmetros necessários para a inicialização:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

A função activeAnimation passa a ser um método, e init será o método responsável pela ativação do evento principal da classe, sendo necessário realizar inicialmente a ativação do método activeAnimation no início do carregamento da página, para apresentar a primeira seção:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

No método init, a chamada de activeAnimation é um callback, então, é necessário realizar seu bind no construtor:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

Neste ponto já está funcional, inicializando no script principal da seguinte forma:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

Contudo, ainda há muito a otimizar.

A função activeAnimation é ativada toda vez que ocorre um scroll, a cada pixel movimentado o método é ativado e consume recursos do navegador, pois a cada movimento ele verifica a distância da seção em relação ao topo da página e se a seção visível na tela está com a classe ativa ou não.

Ao invés de a todo scroll verificar a distância dos elementos em relação ao topo, podemos em uma única vez obter estas distâncias, deixando-as fixas, e verificar em qual ponto está o scroll. Para obter as distâncias por seção, será utilizado o método getDistance, criando uma nova propriedade no objeto, utilizando a deustruturação para permitir o uso do map (desustruturando se obtém uma array), ativado no init. O topo foi arredondado para obter um número sem quebra com Math.floor:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

O método activeAnimation será o responsável em verificar a distância do item de seção em relação ao topo da página utilizando a propriedade pageYOffset do objeto window, utilizando a nova propriedade de distances como referência e executando a adição ou remoção da classe "active" no elemento:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

Para ficar "redondo", o init receberá uma verificação da existência da seção e retornará o objeto:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

O código final, com uma melhor performance, responsabilidade e portabilidade:

JS-1108 - JavaScript Completo ES6 - Refatoração Animação ao Scroll

Mas ainda será realizada uma melhora de performance, utilizando debounce no próximo post.

No final, foi executado o comando do webpack, para montar o arquivo main.js comprimido:

$ npx webpack --entry ./js/script.js -o ./

Para baixar o projeto, clique aqui.

Para visualizar o projeto, clique aqui.

Veja também:

Confira mais artigos relacionados

Este website utiliza cookies próprios e de terceiros a fim de personalizar o conteúdo, melhorar a experiência do usuário, fornecer funções de mídias sociais e analisar o tráfego. Para continuar navegando você deve concordar com nossa Política de Privacidade

Sim, eu aceito. Não, eu não aceito.