<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter" v-on:enter-cancelled="enterCancelled" v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave" v-on:leave-cancelled="leaveCancelled" > <!-- ... --> </transition>
after-enter函数一直没有触发,花了好久时间才获得解决,这里用了Vue官方推荐的插件Velocity.js,如今就让咱们聊聊这个问题css
enter(el, done){ Velocity(el, { translateX: '150px',translateY : '450px' }, { duration: 1000 }) Velocity(el,{opacity: 1},{ duration: 1000 }, { complete: done }) // setTimeout(() => { // el.offsetWidth // el.style.transform = "translate(150px,450px)"; // el.style.transition = "all 2s easy"; // done() // }, 20) },
上面代码的动画效果没有问题,可是after-enter方法却一直没有触发后面经过调试后发现html
Velocity(el,{opacity: 1},{ duration: 1000 }, { complete: done })
改成ajax
Velocity(el,{opacity: 1}, { complete: done })
或者函数
elocity(el,{opacity: 1},{ duration: 1000 , complete: done })
after-enter方法就触发了,那么对比官方给的例子oop
<!-- Velocity works very much like jQuery.animate and is a great option for JavaScript animations --> <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script> <div id="example-4"> <button @click="show = !show"> Toggle </button> <transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave" v-bind:css="false" > <p v-if="show"> Demo </p> </transition> </div> new Vue({ el: '#example-4', data: { show: false }, methods: { beforeEnter: function (el) { el.style.opacity = 0 }, enter: function (el, done) { Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 }) Velocity(el, { fontSize: '1em' }, { complete: done }) }, leave: function (el, done) { Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 }) Velocity(el, { rotateZ: '100deg' }, { loop: 2 }) Velocity(el, { rotateZ: '45deg', translateY: '30px', translateX: '30px', opacity: 0 }, { complete: done }) } } })
作出其余尝试后,发现只要传了4个参数后,个人after-enter方法就不会触发,因此我的以为在Vue translition中Velocity(...args)只能传三个参数,在结合Velocity()的Arguments的参数(源于https://www.cnblogs.com/guand...)动画
{ width: "500px", // 动画属性 宽度到 "500px" 的动画 property2: value2 // 属性示例 }, { /* Velocity 动画配置项的默认值 */ duration: 400, // 动画执行时间 easing: "swing", // 缓动效果 queue: "", // 队列 begin: undefined, // 动画开始时的回调函数 progress: undefined, // 动画执行中的回调函数(该函数会随着动画执行被不断触发) complete: undefined, // 动画结束时的回调函数 display: undefined, // 动画结束时设置元素的 css display 属性 visibility: undefined, // 动画结束时设置元素的 css visibility 属性 loop: false, // 循环 delay: false, // 延迟 mobileHA: true // 移动端硬件加速(默认开启) }
在Vue的钩子函数中Velocity()的第一个参数是el,第二个为动画属性项的定义,第三个参数为动画配置项的定义,Velocity的用法即:spa
Velocity(el,obj1,obj2)
obj1,obj2的属性请看上面的参数插件