Pesquisa de site

Como criar animações e transições em Vue.js


Melhore a aparência do seu aplicativo Vue adicionando animações.

Transições e animações desempenham um papel importante na experiência do usuário. Ao adicionar animações e transições sutis entre os elementos da página da web, você pode aprimorar a experiência do usuário. O site parecerá muito mais suave, mais envolvente e geralmente melhor do começo ao fim.

Este tutorial demonstra como implementar transições e animações em Vue.js. Você aprenderá como criar transições simples e animações complexas usando o componente transição e quadros-chave CSS.

O componente de transição Vue.js

Vue.js possui um componente de transição integrado que permite criar animações em seu aplicativo. Este componente envolve o elemento alvo que queremos animar.

Aqui, o componente de transição envolve o cabeçalho de nível um:

<transition>
  <h1> Hello </h1>
</transition>

Quando você agrupa um elemento com o componente transição, o componente aplicará classes de transição ao elemento que ele encapsula. Existem seis classes de transição no total. Três controlam a animação do elemento conforme ele entra na página. Os outros três controlam a animação do elemento conforme ele sai da página.

O código usado neste artigo está disponível neste repositório GitHub e é gratuito para uso sob a licença do MIT.

Aplicando classes de transição quando os elementos entram na página

Durante o processo de entrada do elemento no DOM, o componente transição aplica as classes enter-from, enter-to e enter -ativo para ele. Essas classes permitem que você controle como o elemento será animado ou transitado na página.

  • enter-from: aplicado ao elemento antes de ele entrar no navegador. Você usa esta classe para definir o estado CSS inicial do elemento.
  • enter-to: aplicado ao elemento conforme ele entra no navegador. Você usa esta classe para definir o estado CSS final do elemento.
  • enter-active: Aplicado enquanto o elemento está em transição de um estado para outro. É aqui que você determina quanto tempo levará a transição.

Vejamos um exemplo:

<transition>
  <h1> Hello </h1>
</transition>
.enter-from {
  opacity: 0;
}
.enter-to {
  opacity: 1;
}
.enter-active {
  transition: opacity 2s ease;
}

Com esse código, o cabeçalho de nível um leva dois segundos para fazer a transição de invisível (opacidade: 0) para totalmente visível (opacidade: 1). Essa transição acontece quando o elemento entra no DOM. Sem a transição, o texto teria aparecido imediatamente no navegador assim que a página carregasse.

Aplicando classes de transição quando os elementos saem da página

O componente transition suporta três outras classes de transição que você precisa aplicar quando o elemento estiver saindo do DOM. Seus nomes são deixar, deixar para e deixar ativo. Essas classes controlam como o elemento será animado ou transitará da página.

Como você deve ter adivinhado, essas classes são semelhantes às classes enter- que discutimos anteriormente. Mas essas classes só são ativadas quando o elemento está prestes a ser desmontado do DOM. Montar e desmontar são conceitos importantes do DOM. Como desenvolvedor, você deve ter um conhecimento básico do DOM e de outros conceitos relacionados.

Vejamos um exemplo:

<transition>
  <h1> Hello </h1>
</transition>
.leave-from {
  opacity: 0;
}
.leave-to {
  opacity: 1;
}
.leave-active {
transition: opacity 2s ease;
}

Nesse caso, o cabeçalho de nível um leva dois segundos para fazer a transição lenta de visível (opacidade: 1) para invisível (opacidade: 0). Essa transição acontece quando o elemento sai do DOM. Sem a transição, o texto teria desaparecido instantaneamente do navegador.

Usando nomes de transição

Você também pode adicionar um atributo nome ao seu componente de transição. Quando você fizer isso, o Vue acrescentará o nome às suas classes de transição. Isso significa que você pode ter várias transições em sua página, cada uma com classes de transição e propriedades CSS exclusivas.

Por exemplo, se você definir o nome fade em seu componente de transição, todas as classes de transição serão prefixadas com fade:

<transition name ="fade">
  <h1> Hello </h1>
</transition>
.fade-enter-from {
  opacity: 1;
}
.fade-leave-from {
  opacity: 1;
}
// other "enter" and "leave" classes with the fade as prefix

Criando Transições Usando o Componente de Transição

Para demonstrar a transição no Vue.js, você envolverá um H1 dentro do componente transição. Abaixo de , você criará um botão. Quando este botão é clicado, ele alterna a variávelshowTitle entre false e true.

Aqui está o código:

<template>
  <transition name="fade">
    <h1 v-if="showTitle"> Hey People </h1>
  </transition>
  <button @click="showTitle = !showTitle"> Toggle </button>
</template>

A seguir, defina a seção script. Esta seção contém o método setup onde você inicializa a variável showTitle com false.

<script>
import {ref} from 'vue'
export default {
  name: "App",
  setup() {
    const showTitle = ref(false)
    return {showTitle}
  } 
};
</script>

Agora você deve ver o texto e o botão no seu navegador:

Se você clicar duas vezes no botão, o texto aparecerá e depois desaparecerá. Mas não haverá transição entre os dois estados. Vamos adicionar a transição dentro da seção de estilos:

<style>
.fade-enter-from {
  opacity: 0;
}
.fade-enter-to {
  opacity: 1;
}
.fade-enter-active {
  transition: opacity 2s ease;
}
.fade-leave-from {
  opacity: 1
}
.fade-leave-to {
  opacity: 0
}
.fade-leave-active {
  transition: opacity 2s ease;
}
</style>

Quando o botão é clicado inicialmente, você está fazendo a transição do H1 de opaco para visível usando as classes .enter. Mas quando o botão é clicado novamente, você usa as classes .leave para fazer a transição do H1 de visível para invisível.

Ambos os conjuntos de transições levam dois segundos e aparecem e desaparecem gradualmente. Você também pode ver que o nome fade é anexado a todos os nomes de classes. Se você não fizer isso, o código não funcionará.

Criando animações complexas com quadros-chave CSS

Às vezes você gostaria que sua animação fosse um pouco mais complexa. A maneira como você faria isso no Vue.js é criando animações de quadros-chave CSS. Confira nosso guia detalhado de animação de quadros-chave CSS se estiver interessado em aprender mais.

Como exemplo, vamos ver um exemplo de animação de oscilação. Esta animação balança o H1 da esquerda para a direita (e vice-versa) conforme ele entra na página. O seguinte CCS cria uma animação oscilante com a diretiva @keyframes:

@keyframes wobble {
 0% { transform: translateY(-60px); opacity: 0}
 50% {transform: translateY(0px); opacity: 1}
 60% {transform: translateX(8px);}
 70% {transform: translateX(-8px);}
 80% {transform: translateX(4px);}
 90% {transform: translateX(-4px);}
 100% {transform: translateX(0px);}
}

No início da animação, o H1 ficará oculto. Na metade da animação (50%), o H1 ficará totalmente visível. Então, nas etapas subsequentes da animação, movemos o texto para a esquerda e para a direita. Isso dá um efeito instável.

Isso aplica a animação ao elemento conforme ele entra na página:

.fade-enter-active {
  animation: wobble 0.5s ease;
}

Neste caso, a animação durará meio segundo.

Aprenda sobre acessibilidade em Vue.js

Enfatizamos como as transições e animações podem melhorar a experiência do usuário. Outro aspecto importante da experiência do usuário é tornar seu aplicativo mais acessível. Nem todos os usuários são iguais. Alguns podem ter deficiências que dificultam o consumo do conteúdo do seu site. Portanto, é importante tornar seu site acessível também.

Artigos relacionados: