关于vue的transition中的几个钩子函数的疑惑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="./js/vue.js"></script>
</head>
<body>
    <div id="test">
      <button @click="show = !show">
        Toggle
      </button>
      <transition
        v-on:before-enter="beforeEnter"
        v-on:enter="enter"
        v-on:after-enter="afterEnter"
        v-on:leave="leave"
      >
        <div v-show="show" ref="oDiv" style="width:200px;height:200px">
          Demo
        </div>
      </transition>
    </div>

    <script>
        new Vue({
          el: '#test',
          data: {
            show: false
          },
          methods: {
            beforeEnter(el) {
                el.style.opacity = 0.6
                el.style.transformOrigin = 'left'
                el.style.transform = 'translate3d(2px, 4px, 0) scale(4)'
            },
            enter(el, done) {
                this.$refs.oDiv.style.background = 'red'
                this.$nextTick(() => {
                    el.style.opacity = 1
                    el.style.transition  = 'all 10.4s'
                    el.style.transform = 'translate3d(0, 0, 0) scale(1)'
                })
                el.addEventListener('transitionend', done)
            },
            afterEnter(el) {
                this.$refs.oDiv.style.transition  = ''
            },
            leave(el, done) {
                // 这句如果加的话就有动画了
                // this.$refs.oDiv.style.width = '200px'
            }
    </script>
</body>
</html>

比如这样,我的理解是beforeEnter相当于过渡类名中的v-enter,enter相当于v-enter-active, 还有就是leave这个hook,这样加动画却是可行的,而在enter里像leave这样写结果却不是渐变的效果,请问这是什么原因,谢谢!

阅读 2.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题