这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战
前言
今天还是复习vue的知识点的一天,我们来看看vue的动画,动画钩子函数以及列表动画,让我们一起来看看吧,学过的同学也来回顾一下。
animate、动画钩子函数、列表动画
一、自定义过渡动画(讲解用注释加代码清晰一点)
1.1)代码示例
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.hongjilin-enter-active {
transition: all .3s ease;
}
.hongjilin-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
//离场动画
.hongjilin-enter, .hongjilin-leave-to
/* .hongjilin-leave-active for below version 2.1.8 (老版本)*/
{
transform: translateX(10px);
opacity: 0;
}
<div id="example-1">
<button @click="show = !show">
Toggle render
</button>
<!--取别名类名-->
<transition name="hongjilin">
<p v-if="show">hello</p>
</transition>
</div>
new Vue({
el: '#example-1',
data: {
show: true
}
})
二、animate动画库的使用
2.1)导入animate.css文件
<link rel="stylesheet" href="animate.css">
2.2)animate动画使用
1.enter-active-class="指定进入的时候绑定的动画类名" 2.leave-active-class="指定离开的时候绑定的动画类名" 注意:如果元素默认就是显示的,那么第一次不会触发动画,如果想第一次就触发动画.可以再添加一个appear属性
<transition enter-active-class="animated fadeInRight "
leave-active-class=" animated fadeOutRight"
appear>
<h1 v-show="flag1">动起来!</h1>
</transition>
2.3)animate官网
(2.4)mode in-out先进后出 out-in先出后进
<transition appear mode='out-in'>
<!-- :is后面跟的是变量,通过变量来指定组件 -->
<component :is="jilin"></component>
</transition>
三.钩子动画函数
3.1)代码解析(加注释讲解):
<div>
<button type="button" @click="flag=!flag">快跑</button>
<!-- 定义js的钩子函数 -->
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
>
<div v-show="show" style="width:100px;height:100px;border-radius: 50px;background-color: red;"></div>
</transition>
</div>
let vm = new Vue({
el: "#app",
data: {
flag: false,
},
methods: {
// el 表示要执行动画的那个DOM元素, 是原生的 js DOM 对象
beforeEnter(el) {
// 设置动画开始之前的初始位置
el.style.transform = "translate(0, 0)"
},
enter(el, done) {
// 刷新动画效果
el.offsetWidth;
// 动画完成后的样式
el.style.transform = "translate(550px, 350px)";
// 动画的持续时间
el.style.transition = "all 3s ease";
// done 其实是 afterEnter() 的引用
done();
},
afterEnter(el) {
// 动画完成之后调用
this.flag = !this.flag
}
}
})
四.列表动画
代码解读:
<!DOCTYPE html>
<html lang="en">
<head>
</html>
<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-2.4.0.js"></script>
<style>
/* 列表项样式 */
li{
border: 1px dashed #999;
margin:5px;
line-height: 35px;
padding-left: 5px;
font-size: 12px;
width:100%;
}
/* 鼠标列表项悬停效果 */
li:hover{
background-color: grey;
transition: all 0.8s ease;
}
/* transition渐变出入场必写基础项 */
.v-enter,.v-leave-to{
opacity: 0;
transform:translateY(80px);
}
.v-enter-active,.v-leave-active{
transition: all 0.6s ease;
}
/* transition 在删除列表项的同时,使剩余未删除项可同步移动对原位置填充*/
.v-move{
transition:all 0.6s ease;
}
.v-leave-active{
position: absolute;
}
</style>
</head>
<body>
<div id="app">
<div>
<label>
Id:
<input type="text" v-model="id">
</label>
<label>
Name:
<input type="text" v-model="name">
</label>
<input type="button" value="添加" @click="add">
</div>
<!-- 列表项必须用transition-group代替transition包围 -->
<!-- appear属性实现列表项入场式效果,必须写上否则入场没效果 -->
<!-- tag属性如果不设置,则默认为span -->
<transition-group appear tag="ul">
<li v-for="(item,i) in list" :key="item.id" @click="del(i)">
{{item.id}}---{{item.name}}
</li>
</transition-group>
</div>
<script>
var vm=new Vue({
el:'#app',
data:{
id:'',
name:'',
//[]不是{}
list:[
{id:1,name:'ess'},
{id:2,name:'red'},
{id:3,name:'rdne'},
{id:4,name:'dnje'}
]
},
methods:{
add(){
this.list.push({id:this.id,name:this.name})
this.id=this.name=''
},
del(i){
this.list.splice(i,1)
}
}
})
</script>
</body>
</html>
总结:动画在vue中很重要的,方式只要掌握技巧,就可以举一反三,还是那个句,一步步来,加油!