<!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>
</head>
<body>
<div id="app">
<!-- vue对于transtion包裹起来的标签, 提供了对应的动画事件, 供我们使用js的方式编写动画 -->
<transition v-on:before-leave="bLeave" v-on:leave="leave" v-on:after-leave="aLeave">
<p v-if="isShow">白毛浮绿水</p>
</transition>
<button @click="change">显示隐藏</button>
</div>
<script src="vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
isShow: true,
left: 0
},
methods: {
change: function() {
this.isShow = !this.isShow;
},
// 动画前做的事情在这里写, 可以在这里定义元素的初始样式
bLeave(el) {
console.log(el);
el.style.marginLeft = 0;
},
// 动画过程在这里编写, 该函数除了可以接收到元素外, 还有一个done方法, 用于告诉vue什么时候动画结束的
// 注意事项: 必须在动画结束时, 手动调用done方法, 不然元素就不会消失
// 注意事项2: 有些时候我们修改元素的style视图不会马上更新, 解决方案是把一些需要计算的数据定义在data里,
// 修改data里的数据, 会让vue强制更新视图
leave(el, done) {
console.log(el);
var timer = setInterval(() => {
this.left += 10;
el.style.marginLeft = `${this.left}px`;
if(this.left >= 200) {
clearInterval(timer);
done();
}
}, 300);
},
// 动画结束时, 如果元素样式需要重置, 那么可以再这里重置
aLeave(el) {
console.log(el);
// 如果要实现多次效果,可以在结束之后将上面的left清0
this.left = 0;
}
}
});
</script>
</body>
</html>
03_10.使用动画钩子函数
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- •+ (void)transitionWithView:(UIView *)view duration:(NSTi...
- 先上图 遇到的一个问题 在我的项目中,常用的生命周期钩子函数一直都是mounted,对于大部分情况,都是屡试不爽、...
- 解决思路来自于:http://568464209.blog.51cto.com/7726521/1769605