Vue的動畫並沒有非常炫酷的效果,不過也是有一些實用性的,在項目中有的地方使用,也是能夠營造出不同的效果
下面為大家列舉兩個簡單實現動畫的例子
使用 <transition>
包裹
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script rel="script" src="js/vue-2.4.0.js"></script> <!--2. 自定義兩組樣式,來控制transition 內部的元素實現動畫--> <style> /*v-enter 是進入之前,元素的起始狀態*/ /*v-leave-to 離開之后動畫的終止狀態*/ .v-enter,.v-leave-to{ opacity: 0;/*透明度*/ transform: translateX(150px); } /*入場(離場)動畫的時間段 */ .v-enter-active,.v-leave-active{ transition: all 0.8s ease; } .my-enter,.my-leave-to{ opacity: 0;/*透明度*/ transform: translateY(70px); } .my-enter-active,.my-leave-active{ transition: all 0.8s ease; } </style> </head> <body> <div id="app"> <input type="button" value="toggle" @click="flag=!flag"> <input type="button" value="toggle2" @click="flag2=!flag2"> <!--1. 使用transition元素把需要被動畫控制的元素,包裹起來--> <transition> <h3 v-if="flag">這是一個H3</h3> </transition> <transition name="my"> <!--區分不同組織間動畫--> <h6 v-if="flag2">這是一個H6</h6> </transition> </div> <script> var vm = new Vue({ el : '#app', data : { flag : false, flag2 : false, }, methods : { }, }); </script> </body> </html>
使用 <transition-group>
包裹
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script rel="script" src="js/vue-2.4.0.js"></script> <link rel="stylesheet" href="css/animate.css"> <style> li{ border: 1px dashed #999; margin: 5px; line-height: 35px; font-size: 14px; padding-left: 5px; width: 100%; } li:hover{ background-color: hotpink; transition: all 0.5s ease; } .v-enter,.v-leave-to{ opacity: 0; transform: translateY(80px); } .v-enter-active,.v-leave-active{ transition: all 0.6s ease; } /*v-move 和 v-leave-active 配合使用,能夠實現列表后續的元素,漸漸地漂上來的效果 */ .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> <ul> <!--在實現列表過渡時,如果需要過渡的元素是通過v-for渲染出來的,不能使用 transition 包裹,需要使用 transition-group --> <!--若需要為 v-for 循環創建的元素設置動畫,必須為每一個元素設置 :key 屬性--> <transition-group> <li v-for="(item,i) in list" :key="item.id" @click="del(i)"> {{ item.id }} --- {{ item.name }} </li> </transition-group> </ul> </div> <script> var vm = new Vue({ el : '#app', data : { id:'', name :'', list : [ {id:1,name:'趙高'}, {id:2,name:'秦檜'}, {id:3,name:'嚴嵩'}, {id:4,name:'魏忠賢'}, ], }, 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>
使用 第三方類實現動畫
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script rel="script" src="js/vue-2.4.0.js"></script> <link rel="stylesheet" href="css/animate.css"> <!--入場 bounceIn 離場 ounceOut--> </head> <body> <div id="app"> <input type="button" value="toggle" @click="flag=!flag"> <!--<transition enter-active-class="animated bounceIn" leave-active-class="animated bounceOut"> <h3 v-if="flag">壞蛋,壞蛋,大壞蛋~~~</h3> </transition>--> <!--<transition enter-active-class="bounceIn" leave-active-class="bounceOut" :duration="200"> //:duration="毫秒值" 統一設置入場和離場時間為 400ms <h3 v-if="flag" class="animated">壞蛋,壞蛋,大壞蛋~~~</h3> </transition>--> <transition enter-active-class="bounceIn" leave-active-class="bounceOut" :duration="{ enter: 200, leave: 2000 }"><!--分別設置時間--> <h3 v-if="flag" class="animated">壞蛋,壞蛋,大壞蛋~~~</h3> </transition> </div> <script> var vm = new Vue({ el : '#app', data : { flag : false, }, methods : { }, }); </script> </body> </html>
不過這樣使用的話,會有一些瑕疵,運行檢查代碼
大家可以看到 ul>span標簽里 放的是塊級 li元素 ,這是不符合標准的,所以應修改代碼如下:
<!-- 【appear】 給 transition-group 添加入場效果--> <!-- 通過 tag 屬性,指定transition-group 渲染 為指定的元素 若不指定,則默認為渲染為 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>
代碼運行如下:
轉自:https://blog.csdn.net/weixin_42218847/article/details/81474923