You are browsing Nuxt 2 docs. Go to Nuxt 3 docs, or learn more about Nuxt 2 Long Term Support.

Translated page Contents of this page might be outdated.

Transições

A Nuxt utiliza o componente de transição para permitir-nos criar transições e animações fantásticas entre as nossas rotas.


Para definir uma transição personalizada para uma rota específica, adicionamos a chave transition ao componente de página:

pages/index.vue
export default {
  // Pode ser uma Sequência de Caracteres
  transition: ''
  // Ou um Objeto
  transition: {}
  // Ou uma Função
  transition (to, from) {}
}

Sequência de Caracteres

Se a chave transition for definida como uma sequência de caracteres (string), esta será usada como transition.name:

pages/index.vue
export default {
  transition: 'home'
}

A Nuxt usará estas configurações para definir o componente da seguinte maneira:

pages/index.vue
<transition name="home"></transition>
Isto é feito automaticamente para nós, e não precisamos de adicionar o componente <transition> às nossas páginas e disposições.

Agora, tudo o que temos de fazer é criar a nova classe para as nossas transições:

pages/index.vue
<style>
  .home-enter-active, .home-leave-active { transition: opacity .5s; }
  .home-enter, .home-leave-active { opacity: 0; }
</style>

Objeto

Se a chave transition  for definida como um objeto:

pages/index.vue
export default {
  transition: {
    name: 'home',
    mode: 'out-in'
  }
}

A Nuxt usará estas configurações para definir o componente da seguinte maneira:

pages/index.vue
<transition name="home" mode="out-in"></transition>

O objeto transition pode ter muitas propriedades como name, mode, css, duration e muito mais. Consultar a documentação da Vue por mais informações.

Também podemos definir métodos na propriedade transition da página, para mais informações sobre as funções gatilhos de JavaScript consultar a documentação da Vue:

export default {
  transition: {
    afterLeave(el) {
      console.log('afterLeave', el)
    }
  }
}

Modo de Transição

O modo de transição predefinido para as páginas é diferente do modo de transição predefinido na Vue.js. O modo de transition é, por padrão, definido como out-in. Se quisermos executar transições de entrada e saída em simultâneo, temos de definir o modo para a sequência de caracteres vazia mode: ''.
pages/index.vue
export default {
  transition: {
    name: 'home',
    mode: ''
  }
}

Função

Se a chave transition for definida como uma função:

pages/index.vue
export default {
  transition(to, from) {
    if (!from) {
      return 'slide-left'
    }
    return +to.query.page < +from.query.page ? 'slide-right' : 'slide-left'
  }
}

Transições aplicadas às navegação:

/ to /posts => slide-left,/posts to /posts?page=3 => slide-left,/posts?page=3 to /posts?page=2 => slide-right.

Definições Globais

O nome da transição padrão da Nuxt é "page". Para adicionar uma transição de desaparecimento a cada página da nossa aplicação, só precisamos de um ficheiro .css que seja partilhado por todas as nossas rotas.

A nossa folha de estilo global está em assets/main.css:

assets/main.css
.page-enter-active,
.page-leave-active {
  transition: opacity 0.5s;
}
.page-enter,
.page-leave-to {
  opacity: 0;
}

Depois adicionamos o seu caminho ao vetor css no nosso ficheiro nuxt.config.js:

nuxt.config.js
export default {
  css: ['~/assets/main.css']
}

Definições de Configuração

A Propriedade layoutTransition

A transição de disposição é utilizada para definir as propriedades predefinidas das transições de disposição.

As definições predefinidas para as transições de disposição são:

{
  name: 'layout',
  mode: 'out-in'
}
assets/main.css
.layout-enter-active,
.layout-leave-active {
  transition: opacity 0.5s;
}
.layout-enter,
.layout-leave-active {
  opacity: 0;
}

Se quisermos alterar as definições predefinidas para as nossas transições de disposição, podemos fazer isto no ficheiro nuxt.config.js:

nuxt.config.js
export default {
  layoutTransition: 'my-layouts'
  // ou
  layoutTransition: {
    name: 'my-layouts',
    mode: 'out-in'
  }
}
assets/main.css
.my-layouts-enter-active,
.my-layouts-leave-active {
  transition: opacity 0.5s;
}
.my-layouts-enter,
.my-layouts-leave-active {
  opacity: 0;
}

A Propriedade pageTransition

As definições predefinidas para as transições de página são:

{
  name: 'page',
  mode: 'out-in'
}

Se quisermos modificar as definições predefinidas, podemos fazê-lo no ficheiro nuxt.config.js:

nuxt.config.js
export default {
  pageTransition: 'my-page'
  // ou
  pageTransition: {
    name: 'my-page',
    mode: 'out-in',
    beforeEnter (el) {
      console.log('Before enter...');
    }
  }
}

Se modificarmos o nome da transição de página, também teremos de renomear a classe da folha de estilo:

assets/main.css
.my-page-enter-active,
.my-page-leave-active {
  transition: opacity 0.5s;
}
.my-page-enter,
.my-page-leave-to {
  opacity: 0;
}