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

O Nuxt usa o componente de transição para permitir que você criar animações e transições incríveis entre suas rotas.


Para definir uma transição personalizada para uma rota específica, adiciona a chave transition  ao componente da 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, ela será usada como o transition.name.

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

O Nuxt usará essas configurações para definir o componente da seguinte forma:

pages/index.vue
<transition name="home"></transition>
Isto é feito automaticamente e você não precisa adicionar o componente <transition> a sua página ou esquemas (layouts).

Agora tudo o que você precisa fazer é criar a nova classe para suas 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'
  }
}

O Nuxt usará essas configurações para definir o componente da seguinte forma:

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

O objeto transition  pode ter várias propriedades tais como name, mode, css, duration e muitas mais. Consulte a documentação do vue para ter informações mais detalhadas.

Você também pode definir métodos dentro da propriedade transition , para saber mais sobre consulte os Gatilhos de JavaScript na documentação do vue.

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

Modo de Transição

O modo de transição padrão para páginas diferem do modo padrão no Vue.js. O modo transition está por padrão definido como out-in. Se você quiser executar as transições de entrada e saída simultaneamente, voê tem de definir o mode para uma string 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 na navegação:

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

Configuração Global

O nome de transição padrão do Nuxt é "page". Para adicionar uma transição fade para todas páginas da sua aplicação, tudo o que você precisa é um ficheiro CSS que é compartilhado por todas rotas.

Nosso css global dentro de assets/main.css:

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

Depois adicionarmos seu caminho ao array css dentro do nosso ficheiro de configuração nuxt.config.js :

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

Configuração das Configurações

A Propriedade layoutTransition

A transição do esquema (ou layout) é usada para definir as propriedades da transições de esquema (layout).

A configuração padrão para transições de esquema 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 você quiser mudar as configurações padrões para as transições do seu esquema você pode fazer isso dentro do 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

A configuração padrão para transições de página são:

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

Deseja você modificar a configuração padrão, você pode fazer isso dentro do 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 você modificar o nome da transição da página você também terá de renomear a classe css.

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