PITCH: Que tal uma biblioteca de animação que funcionará em seu HTML puro? Sem React, Vue, Angular ou qualquer outra coisa

Fala, pessoal! 👋

Compartilhando aqui no que trabalhei nas últimas semanas: Uma biblioteca de animações baseada em scroll: O MurphyJS. A ideia é ser simples, baseado em IntersectionObserver e flexível.

O que o MurphyJS faz?

Simples: Você coloca data-attributes-* no seu HTML e animação acontece ao rolar a página.

O que mais da pra fazer?

  • Agrupamento de elementos: Use data-murphy-group para controlar animações em conjunto, facilitando cenários onde você quer animar vários elementos de uma vez só.
  • Controle programático: Você pode acionar animações via JavaScript, usando métodos como murphy.play() e murphy.reset(), inclusive para grupos específicos.
  • Diversos tipos de animação: Suporte a efeitos como fade, slide, zoom, flip, bounce, elastic, entre outros.
  • Personalização total: Ajuste facilmente duração, delay, easing, distância e outros parâmetros direto nos atributos ou via API.
  • Eventos detalhados: MurphyJS dispara eventos em cada etapa da animação, permitindo integrações avançadas e reações customizadas no seu código.
  • Open source e em evolução: O código está aberto para contribuições e feedbacks aqui: https://github.com/cesarolvr/murphyjs/issues.

Demo e exemplos:

Nessa página de exemplos https://www.murphyjs.org/examples tem todas as features que implementei. São elas:

  • Basic Animations
    • Animações simples de entrada: bottom-to-top, top-to-bottom, left-to-right, right-to-left.
  • Group-based Animations
    • Controle de animações por grupo usando data-murphy-group.
  • Class-based Animations
    • Animações disparadas programaticamente via classe Murphy.
  • Standard Easing Functions
    • Exemplos com easings padrão: ease, linear, ease-in, ease-out, ease-in-out.
  • Material Design Easing
    • Animações com easings inspirados no Material Design.
  • Custom Easing Functions
    • Efeitos como bounce, elastic, smooth, sharp, swift, spring.
  • Custom Duration and Delay
    • Personalização de duração e delay das animações.
  • Custom Distance
    • Controle da distância percorrida pelo elemento durante a animação.
  • Combined Examples
    • Combinação de diferentes efeitos, delays e distâncias.
  • Sequential Animations
    • Animações sequenciais, como o efeito do logo murphy.js.
  • Custom Configuration
    • Demonstração de como customizar cada atributo da animação.
  • Easing Functions
    • Teste de diferentes funções de easing para sentir o efeito de cada uma.
  • Using Events for Custom Effects
    • Exemplo de como usar eventos do MurphyJS para adicionar comportamentos customizados.
  • Flip Animations
    • Efeitos de flip: flip-left, flip-right, flip-up, flip-down.
  • Zoom Animations
    • Efeitos de zoom-in e zoom-out.
  • Fade Animations
    • Efeitos de fade, fade-up, fade-down, fade-left, fade-right.
  • Rotate Animations
    • Efeitos de rotação: rotate-left, rotate-right.
  • Scale Animations
    • Efeitos de scale-up e scale-down.
  • Slide Animations
    • Efeitos de slide-up, slide-down, slide-left, slide-right.
  • Bounce Animations
    • Efeitos de bounce-in e bounce-out.

Perguntas pertinentes:

Se você já trabalhou com animações, provavelmente se perguntará porque usar Murphy ao invés dos concorrentes AOS e Framer-Motion. Vamos lá:

  1. Framer-Motion nem é um concorrente de fato. É superior em todos os aspectos (de longe) mas apenas para React. Isso acarreta em 157KB de tamanho (quase 50x maior que o Murphy).
  2. AOS também é agnóstico e funciona JS vanilla mas tem o dobro do tamanho 8KB (o que na maioria dos caso será insignificante), não é baseado em IntersectionObserver e sim em um listener simples de scroll (o que pode em alguns casos extremos causar perda de FPS), tem mais features e é mais maduro (por enquanto 🤣).
  3. Em resumo, o Murphy pode ser uma boa saída para coisas mais simples e casuais. Te oferece uma API tanto declarativa como imperativa. Fica a gosto da pessoa codando.

Se você curte animações, procura uma alternativa ao AOS ou só quer fazer uma página com melhor acabamento sem muito tooling, use e mande uma mensagem aqui se achar algum problema: https://github.com/cesarolvr/murphyjs/issues

E deixa um starzinho lá, caso goste! https://github.com/cesarolvr/murphyjs/

Abraços! 🚀

Gostei muito, a documentação está clara, e a API muito bem estruturada pra um uso fácil e rápido das animações.

Com certeza estará na minha lista de ferramentas para futuros projetos, bom demais! :rocket: :star:

Muito simples e funcional. Achei a documentação muito organizada e bonita.

Com certeza considerarei o uso quando precisar criar alguma landing page.

Parabens!!

Gostei da ideia de oferecer uma solução plug & play mas também me deixar customizar conforme minha necessidade.

Sempre curto quando a lib é super simples de instalar e já botar para jogo! Destaque para a doc completa também.

Muito massa. Muito bem documentado e útil. Essa simplificação nas animações é uma boa, visto a tendência de complicações desnecessárias atuais.

Gosto muito destes projetos que são igualmente Agnósticos e Leves.

Mais uma excelente iniciativa e já botei aqui no meus favoritos pois animação é algo que dá muito trabalho e ao mesmo tempo entrega muito valor as aplicações.

Ter algo que simplifica esse processo, trazendo um valor enorme é algo que realmente faz diferença no ecossistema Javascript.

Parabéns!

Gostei muito da proposta e da solução. A documentação também tá muito completa, o que é ótimo. Vou querer testar em um futuro projeto.

Muito legal, parabéns. A documentação está bem fácil de entender e implementar, achei as funcionalidades bem parecidas com as da lib scrollCue.

Só uma questão aqui, se a lib pode ser utilizada sem frameworks, como está no título, não seria o caso de ter um cdn para a injeção do script via Html?

Mais uma vez parabéns!!!

Ótima ideia, @LeAndrade! Em breve devo implementar isso 👍🏾

Muito boa a proposta, parabéns! A implementação é bem simples e rápida, a documentação ficou bem completa e objetiva.

Top demais a ideia! Pra mim que sou back-end e as vezes preciso fazer uns front em projeto pessoal é bom demais, sem a necessidade de aprender um React da vida.

Cara, isso é simplesmente genial! Parabéns pelo seu projeto! 👏👏

Alguém te avisou que jquery existia antes de angular ou react?

O mundo fica um pouco pior quando alguém lança uma biblioteca javascript que faz exatamente a mesma coisa que outras, de um jeito diferente.

Círculos e mais círculos rumo ao infinito de possibilidades sobre o mesmo lugar.

@gaido, O mundo fica um pouco pior quando devs nao entendem a diferença entre jQuery e uma biblioteca de animação. Pior ainda comparar jQuery com frameworks atuais. Dada a falta de entendimento dado a comparação, a falta de entendimento do texto com relação aos diferenciais, e a resposta "nao quero baixar", entendo que não esta no momento de carreira que consiga opinar o que é bom ou nao para o mundo.
Eu estou indo chorar. Volto na terça.
"O que o MurphyJS faz? Simples: Você coloca data-attributes-* no seu HTML e animação acontece ao rolar a página." jQuery não tem isso... Embora, claro, você poderia combinar o `.scroll()` dele + `.animate()` para ter um efeito semelhante. Mas quer mesmo baixar o jQuery inteiro só pra usar esses dois métodos?
Eu não quero baixar nada.