一、Vue中實現動畫的方式:https://cn.vuejs.org/v2/guide/transitions.html Vue 在插入、更新或者移除 DOM 時,提供多種不同方式的應用過渡效果。包括以下工具: 在 CSS 過渡和動畫中自動應用 class 可以配合使用第三方 CSS 動畫庫,如 A ...
一、Vue中實現動畫的方式:https://cn.vuejs.org/v2/guide/transitions.html
Vue 在插入、更新或者移除 DOM 時,提供多種不同方式的應用過渡效果。
包括以下工具:
- 在 CSS 過渡和動畫中自動應用 class
- 可以配合使用第三方 CSS 動畫庫,如 Animate.css
- 在過渡鉤子函數中使用 JavaScript 直接操作 DOM
- 可以配合使用第三方 JavaScript 動畫庫,如 Velocity.js
二、使用過渡類名實現動畫:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width= , initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>donghua</title> <link rel="stylesheet" href="./lib/animate.css" /> <style> /* 2.自定義兩組樣式,來控制 transition 內部的元素實現動畫 */ /* v-enter【這是一個時間點】是進入之前,元素的起始狀態,此時還沒有開始進入 */ /* v-leave-to 【這是一個時間點】 是動畫離開之後,離開的終止狀態,此時,元素 動畫已經結束了*/ .v-enter, .v-leave-to { opacity: 0; /* 沿著X軸 */ /* transform: translateX(150px); */ /* 沿著Y軸 */ transform: translateY(150px); } /*v-enter-active【入場動畫的時間段】 */ /* v-leave-active【離場動畫的時間段】 */ .v-enter-active, .v-leave-active { transition: all 0.8s ease; } </style> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="toggle" @click="flag=!flag" /> <!-- 需求:點擊按鈕,讓H3顯示,再點擊,讓H3隱藏 --> <!-- 1、使用 transition 元素,把需要被動畫控制的元素,包裹起來 --> <transition> <h3 v-if="flag">這是一個H3</h3> </transition> </div> <script> var vm = new Vue({ el: "#app", data: { flag: false } }); </script> </body> </html>
三、使用animate.css類實現動畫:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width= , initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>donghua</title> <link rel="stylesheet" href="./lib/animate.css" /> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="toggle" @click="flag=!flag" /> <!-- 使用 :duration="{ enter :200, leave: 400}"來分別設置 入場的時長和 離場的時長 --> <transition enter-active-class="bounceIn" leave-active-class="bounceOut" :duration="{ enter :200, leave: 400}" > <h3 v-if="flag" class="animated">這是一個H3</h3> </transition> </div> <script> var vm = new Vue({ el: "#app", data: { flag: false } }); </script> </body> </html>
四、使用鉤子函數:
可以在屬性中聲明 JavaScript 鉤子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>donghua</title> <style> /* 定義動畫小球 */ .ball { width: 15px; height: 15px; border-radius: 50%; background-color: red; } </style> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="從碗里出去" @click="flag=!flag" /> <!-- 1.使用 transition 元素把 小球包裹起來 --> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" > <div class="ball" v-show="flag"></div> </transition> </div> <script> var vm = new Vue({ el: "#app", data: { flag: false }, methods: { //動畫鉤子函數的第一個參數:el,表示 要執行動畫的那個DOM元素,是個原生的JS DOM對象 //大家可以認為,el是通過docunment.getElementById('')方式獲取到的原生JS DOM對象 beforeEnter(el) { //beforeEnter 表示動畫入場之前,此時,動畫尚未開始,可以在其中設置元素開始動畫之前的起始樣式 // 設置小球開始動畫之前的起始位置 el.style.transform = "translate(0,0)"; }, enter(el, done) { // 這句話沒有實際的作用,但是如果不寫,出不來動畫效果; //可以認為 el.offsetWidth 會強制動畫刷新 el.offsetWidth; //enter 表示動畫開始之後的樣式,這裡,可以設置小球完成動畫之後的,結束狀態 el.style.transform = "translate(150px,450px)"; el.style.transition = "all 1s ease"; //這裡的 done,起始就是 afterEnter 這個函數,也就是說 done 是 afterEnter 函數的引用 done(); }, afterEnter(el) { //動畫完成後,會調用 afterEnter // console.log("ok"); //這句話,第一個功能就是控制小球的顯示與隱藏; //第二個功能:直接跳過後半場動畫,讓flag 標識符 直接變為 false; //當第二次再點擊 按鈕的時候,flag: false---> true this.flag = !this.flag; //Vue把一個完整的動畫,使用鉤子函數,拆分為了兩部分: //我們使用flag 標識符,來表示動畫的切換flag: false--> true -->false } } }); </script> </body> </html>
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter" v-on:enter-cancelled="enterCancelled" v-on:before-leave="beforeLeave" v-on:leave="leave" v-on:after-leave="afterLeave" v-on:leave-cancelled="leaveCancelled" > <!-- ... --> </transition>