vue中js钩子函数实现动画过渡

今天看了vue中js钩子函数实现动画,照着敲了一遍发现只有enter的淡入能实现,淡出没有动画效果,即使在leave()中移入done用settimeout延迟也仅仅是延迟的触发时间,并没有出现动画效果。后来经过搜索发现是enter()中缺少了一行代码 el.offsetWidth ,关于这行代码的作用参考文档里的大佬有解释,本人还不是很明白就不乱解释了,原文章链接: vue动画过渡 javascript钩子函数详解_V v vae的博客-CSDN博客_过渡动画钩子函数

最终实现的代码如下:

<template>
  <div>
      <!-- :css="false" 可以指定不加载css样式 -->
      <transition  @before-leave="beforeLeave" @leave="leave" @after-leave="afterLeave" @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" :css="false">
          <p v-if="isshow">显示或隐藏</p>
      </transition>
      <button @click="isshow=!isshow">点击</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      isshow: true
    }
  },
  methods: {
    beforeLeave: function (el) {
      console.log('离开前')
      el.style.opacity = 1
    },
    leave: function (el, done) {
      console.log('离开进行中')
      el.style.transition = 'all 3s'
      el.style.opacity = 0
      setTimeout(done, 3000)
    },
    afterLeave: function (el) {
      console.log('离开结束')
    },
    beforeEnter: function (el) {
      console.log('进入前')
      el.style.opacity = 0
    },
    enter: function (el, done) {
      // el.offsetWidth引起浏览器的重回
      // eslint-disable-next-line no-unused-expressions
      el.offsetWidth
      el.style.transition = 'all 3s'
      console.log('进入过程中')
      el.style.opacity = 1
      setTimeout(done, 3000)
    },
    afterEnter: function (el) {
      console.log('进入结束')
    }
  }
}
</script>

<style scoped>
p{
    width: 200px;
    height: 200px;
    background: greenyellow;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值