动画的作用:提高用户的体验,帮助用户更好的理解页面中的功能。
使用过渡类名实现动画
动画进入:
-
v-enter:动画进入之前的初始状态
-
v-enter-to:动画进入之后的结束状态
-
v-enter-active:动画进入的时间段
PS:第一、第二个是时间点;第三个是时间段。
动画离开:
-
v-leave:动画离开之前的初始状态
-
v-leave-to:动画离开之后的结束状态
-
v-leave-active:动画离开的时间段
PS:第一、第二个是时间点;第三个是时间段。
举个栗子:通过Vue的过渡类名来实现
v-enter-to
和v-leave
的状态是一样的。而且一般来说,v-enter
和v-leave-to
的状态也是一致的。所以,我们可以把这四个状态写成两组。
现在我们来写一段代码使得点击按钮时,让div显示/隐藏。
1.如果我们不使用动画,应该是这样做:
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<link rel="stylesheet" type="text/css" href="index.css">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="toggle" @click="flag=!flag">
<!-- 需求:点击按钮,让h3显示,再点击,让h3隐藏-->
<h3 v-if="flag">this is the h3</h3>
</div>
<script src="index.js"></script>
</body>
</html>
new Vue({
el:'#app',
data:{
flag:false
},
methods:{}
})
2.使用动画:通过Vue的过渡类名来实现
现在,我们加淡入淡出的动画,让div显示和隐藏。
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<link rel="stylesheet" type="text/css" href="index.css">
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js"></script>
</head>
<body>
<div id="app">
<input type="button" value="toggle" @click="flag=!flag">
<!-- 需求:点击按钮,让h3显示,再点击,让h3隐藏-->
<!-- 使用transition元素,把需要被动画控制的元素,包裹起来-->
<!-- transition元素是VUE官方提供的-->
<transition>
<h3 v-if="flag">this is the h3</h3>
</transition>
</div>
<script src="index.js"></script>
</body>
</html>
#app {
width: 800px;
margin: 20px auto;
}
.v-enter,
.v-leave-to{
opacity: 0;
}
.v-enter-active,
.v-leave-active{
transition: all 1s ease;
}
new Vue({
el:'#app',
data:{
flag:false
},
methods:{}
})
我们使用vue提供的<transition>
标签把需要被动画控制的元素,包裹起来;然后使用.v-enter
、.v-leave-to
等进行动画的定义
3、再加一个tramsform属性进行位移:
我们在上方代码的基础之上,加一个tramsform属性,让动画有一个位移的效果。
#app {
width: 800px;
margin: 20px auto;
}
.v-enter,
.v-leave-to{
opacity: 0;
transform: translateX(80px);/* 表示一开始让DOM元素处于靠右80px的位置*/
}
.v-enter-active,
.v-leave-active{
transition: all 1s ease;
}
修改过渡类名的前缀
在上一小段中,.v-enter
、.v-leave-to
这些过渡类名都是以v-
开头的。这样做,会有一个局限性:假设有两个DOM元素都用<transition>
进行了包裹,那这两个DOM元素就都具备了v-
中所定义