【问题标题】:Vue page transition with Vue-Router使用 Vue-Router 进行 Vue 页面转换
【发布时间】:2018-10-27 19:02:33
【问题描述】:

我正在尝试使用 Vue 和 Vue-Router 进行漂亮的页面转换。

我直接在 router-view 中加载不同的页面(组件),它们的动画效果很好。

我已经为我的所有页面制作了很棒的动画,但是我需要弄清楚如何根据单击的路由器链接简单地更改过渡。

如果 route-link 的类很特殊,再做一个动画。

App.vue

<template>
  <div id="app">
    <nav>
      <router-link to="/1">Page 1</router-link>
      <router-link to="/2">Page 2</router-link>
      <router-link to="/3">Page 3</router-link>
      <router-link class="special" to="/4">Page 4</router-link>
    </nav>
    <transition @enter="enter" @leave="leave">
      <router-view/>
    </transition>
  </div>
</template>

<script>
  export default {
    ...
    methods: {
      enter(el, done) {
        // main page animation with a timeline using Greensock
      },
      leave(el, done) { 
        // main page animation with a timeline using Greensock
      }
    },
  }
</script>

如何让它工作?

如果用户点击带有特殊类的router-link,则更改

<transition @enter="enter" @leave="leave">
  <router-view/>
</transition>

收件人:

<transition @enter="enterSpecial" @leave="leaveSpecial">
  <router-view/>
</transition>

以便我添加

    methods: {
      enter(el, done) {
        // main page animation with a timeline using Greensock
      },
      leave(el, done) { 
        // main page animation with a timeline using Greensock
      }
    },

我已经通过 docs + google 搜索了,但没有找到任何可以帮助的东西。

【问题讨论】:

  • 你能分享任何现场演示吗?
  • 不幸的是,并非如此。我在这里过度简化了代码,实际代码非常不同..我只需要找到一种方法来根据单击的路由器链接进行另一个转换。实际的特殊路由器链接位于子组件中。我尝试在路由器链接上使用@click.native 来执行一个函数(更改 vuex 状态,这可以帮助我更改动画),但随后它停止了链接的实际重定向。
  • 没问题,我个人需要现场演示来确保给定的答案是否有效。但我仍然相信 vuejs 的每一种情况都可以部分分享。

标签: javascript vue.js vuejs2 vue-router


【解决方案1】:

您可以使用路由器元字段来了解您应该应用哪个动画。 在路由声明中,您可以为每个路由添加元字段。例如:

const router = new VueRouter({
  routes: [
    {
      path: '/default',
      component: SomeComponent
    },
    {
      path: '/special',
      component: SomeComponent2,
      // meta fields
      meta: { 
          animation: 'special'
      }
    }
  ]
})

然后在你的组件上,你可以这样做:

 methods: {
   enter(el, done) {
     if (this.$route.meta.animation === 'special') {
         // apply special animation
     } else {
        // main page animation with a timeline using Greensock
     }
   },
   leave(el, done) { 
     // main page animation with a timeline using Greensock
   }
 }

您可以找到有关 vue-router 元字段here 的更多信息。

【讨论】:

  • 感谢您的回答,这绝对是朝着正确的方向前进。我唯一会遇到的问题是我有 3 种方式可以为每个组件设置动画:常规、从右侧、从左侧。我正在创建一个包含组件(项目)的投资组合部分,可以通过单击路由器链接(常规转换)、单击“下一个项目”路由器链接(从右侧转换)或上一个项目来加载(从左边过渡)..你知道我如何检测动画吗,取决于点击的路由器链接?非常感谢...
  • 哦,这与原来的问题有点不同。在这种情况下,我会告诉你创建一个对 $router 的监视,并根据来自 'from' 和 'to' 路由的信息决定应该动态应用哪个转换。文档有一个很好的例子表明:router.vuejs.org/en/advanced/transitions.html
  • 好的,有道理。我将尝试实施您刚才描述的内容。非常感谢您提供的信息!
猜你喜欢
  • 1970-01-01
  • 2017-12-10
  • 2015-11-17
  • 2018-10-04
  • 2020-02-04
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多