Vue学习4——动画2-钩子函数动画
声明 JavaScript 钩子
<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>
当只用 JavaScript 过渡的时候,在 enter 和 leave 中必须使用 done 进行回调。否则,它们将被同步调用,过渡会立即完成。
小球半场动画演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./lib/vue.js"></script>
<style>
.ball {
width: 50px;
height: 50px;
border-radius: 50%;
background-color: red;
}
</style>
</head>
<body>
<div id="app">
<input type="button" value="加入购物车" @click="flag=!flag">
<transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
<div class="ball" v-show="flag"></div>
</transition>
</div>
<script>
//创建Vue实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
flag: false
},
methods: {
//注意:动画钩子函数的第一个参数 el 表示要执行动画的那个DOM元素,是原生的js DOM对象
beforeEnter(el) {
// beforeEnter表示动画入场前,此时,动画尚未开始,可以在beforeEnter中,设置动画开始之前的起始样式
el.style.transform = "translate(0,0)"
},
enter(el, done) {
//这句话,其实没有实际作用,但是不写,出不来动画效果
//可以认为,el.offsetWidth强制动画刷新
el.offsetWidth
el.style.transform = "translate(150px,450px)"
el.style.transition = "all 1s ease"
// 这里的done,就是afterEnter这个韩式,也就是说 done是afterEnter函数的引用
done()
},
afterEnter(el) {
this.flag = !this.flag
}
}
});
</script>
</body>
</html>
3569



被折叠的 条评论
为什么被折叠?



