首页 > 解决方案 > 两个页面之间的转换不适用于 vue.js 和 GSAP

问题描述

我已经开始学习 vue.js,我想在两个页面之间使用 GSAP(而不是 css)进行转换,所以我找到了这些属性 : v-on:enter, v-on:leave.

看来我的v-on:enter动画只在我的应用程序的第一次调用中起作用。我没有看到“离开”动画,而且当新页面出现时我有一些重复的内容。

我在这里有两个问题:

这是我在 App.vue 文件中使用的代码,非常感谢。

<template>
  <div id="app">

    <transition 
      appear
      v-on:enter="enter" 
      v-on:leave="leave"
      v-bind:css="false"
    >
      <router-view/>
    </transition>

  </div>
</template>

<script>
import { TweenMax } from "gsap/TweenMax";

export default {
  name: 'App',
  components: {
  },
  methods: {
    enter(el, done) {
      TweenMax.to('body', 1, {opacity:1, onComplete:done});
    },
    leave(el, done) {
      TweenMax.to('body', 1, {opacity:0, onComplete:done});
    }   
  }
}
</script>

标签: javascriptvue.jstransitiongsap

解决方案


  1. 使用out-in 过渡模式首先将当前视图过渡出去,然后在完成后,新视图过渡进来。
  2. beforeEnter在您的组件方法选项中创建一个方法以将目标元素设置opacity0.
  3. 通过添加到 组件来监听beforeEnter JavaScript 钩子。v-on:before-enter="beforeEnter"transition

除非有充分的理由body用作目标元素,否则请改用视图组件el


修改后的代码:

<template>
  <div id="app">

    <transition 
      appear
      v-bind:css="false"
      v-on:before-enter="beforeEnter"
      v-on:enter="enter" 
      v-on:leave="leave"
    >
      <router-view/>
    </transition>

  </div>
</template>

<script>
import { TweenMax } from "gsap/TweenMax";

export default {
  name: 'App',
  components: {
  },
  methods: {
    beforeEnter(el) {
      TweenMax.set(el, { opacity: 0 });
    },
    enter(el, done) {
      TweenMax.to(el, 1, { opacity:1, onComplete:done });
    },
    leave(el, done) {
      TweenMax.to(el, 1, { opacity:0, onComplete:done });
    }   
  }
}
</script>

推荐阅读