过渡(动画)
1.简介
Vue在插入,更新或者移除DOM时,提供多种不同方式的应用过渡效果
本质上还是使用CSS3动画:transition,animation
2.基本用法
使用transition组件,将要执行的动画的元素包含在该组件内
<transition>
运动的元素
</transition>
过滤的css类名:6个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动画</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<style type="text/css" media="screen">
p{
width:300px;
height:300px;
background:green;
}
.fade-enter-active,.fade-leave-active{
transition:all 2s ease;
}
.fade-enter-active{
opacity:1;
width:300px;
height:300px;
}
.fade-leave-active{
opacity:0;
width:100px;
height:100px;
}
.fade-enter{
opacity:0;
width:100px;
height:100px;
}
</style>
<body>
<div id="itany">
<button @click="flag=!flag">点我</button>
<transition name="fade"
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
@leave="leave"
@after-leave="afterLeave"
>
<p v-show="flag">北京</p>
</transition>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#itany",
data:{
flag:false
},
methods:{
beforeEnter(e){
alert('动画进入之前会执行');
e.style.background="yellow"
},
enter(){
alert('动画进入');
},
afterEnter(e){
alert('动画进入之后');
e.style.background="pink"
},
beforeLeave(){
alert('动画即将之前');
},
leave(){
alert('动画离开');
},
afterLeave(){
alert('动画离开之后');
}
}
})
</script>
</html>
3.钩子函数
8个
4.结合第三方动画库animate.css一起使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动画</title>
<script type="text/javascript" src="js/vue.min.js"></script>
<link rel="stylesheet" href="css/animate.css">
</head>
<style type="text/css" media="screen">
p{
width:300px;
height:300px;
background:green;
margin:0 auto;
}
</style>
<body>
<div id="itany">
<button @click="flag=!flag">点我</button>
<transition enter-active-class="animated bounceInLeft" leave-active-class="animated bounceInRight">
<p v-show="flag">北京</p>
</transition>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#itany",
data:{
flag:false
},
methods:{
}
})
</script>
</html>
5.多元素动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多元素动画</title>
<script type="text/javascript" src="js/vue.min.js"></script>
<link rel="stylesheet" href="css/animate.css">
</head>
<style type="text/css" media="screen">
p{
width:100px;
height:100px;
background:green;
margin:20px auto;
}
</style>
<body>
<div id="itany">
<button @click="flag=!flag">点我</button>
<transition-group enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
<p v-show="flag" :key="1">itany</p>
<p v-show="flag" :key="2">北京</p>
</transition-group>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#itany",
data:{
flag:false
},
methods:{
}
})
</script>
</html>
6.练习
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多元素动画</title>
<script type="text/javascript" src="js/vue.min.js"></script>
<link rel="stylesheet" href="css/animate.css">
</head>
<style type="text/css" media="screen">
p{
width:50px;
height:50px;
background:green;
margin:10px auto;
}
</style>
<body>
<div id="itany">
<!-- <button @click="flag=!flag">点我</button> -->
<input type="text" v-model="name">
<transition-group enter-active-class="animated bounceInLeft" leave-active-class="animated bounceOutRight">
<p v-for="(v,k) in arr2" :key="k" v-show="flag">
{{v}}
</p>
</transition-group>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#itany",
data:{
flag:true,
arr:['tom','jack','mike','elex','mark'],
name:''
},
computed:{
arr2:function(){
var temp = [];
this.arr.forEach(val => {
if(val.includes(this.name)){
temp.push(val);
}
})
return temp;
}
}
})
</script>
</html>
网友评论