vue.js動畫中的js鉤子函數(shù)的實現(xiàn)
在transition中還可以通過設(shè)置javascript鉤子函數(shù),實現(xiàn)自定義動畫效果。
以實現(xiàn)擊球效果為例:
擊球
代碼解析:
<!-- 定義js的鉤子函數(shù) --> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" > <img v-show="flag" class="ball" :src="ball" alt="" width="30"> </transition>
let vm = new Vue({ el: "#app", data: { flag: false, ball: 'https://upload-images.jianshu.io/upload_images/1864602-ec73f549171a6601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240' }, methods: { // el 表示要執(zhí)行動畫的那個DOM元素, 是原生的 js DOM 對象 beforeEnter(el) { // 設(shè)置動畫開始之前的初始位置 el.style.transform = "translate(0, 0)" }, enter(el, done) { // 刷新動畫效果 el.offsetWidth; // 動畫完成后的樣式 el.style.transform = "translate(550px, 350px)"; // 動畫的持續(xù)時間 el.style.transition = "all 3s ease"; // done 其實是 afterEnter() 的引用 done(); }, afterEnter(el) { // 動畫完成之后調(diào)用 this.flag = !this.flag } } })
完整代碼
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="external nofollow" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <style> .container { margin-top: 2%; } img.ball { margin-left: 3%; } </style> <body> <div class="container"> <div id="app"> <button class="btn btn-danger" @click="flag=!flag">擊球</button> <!-- 定義js的鉤子函數(shù) --> <transition @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter" > <img v-show="flag" class="ball" :src="ball" alt="" width="30"> </transition> </div> </div> <script> let vm = new Vue({ el: "#app", data: { flag: false, ball: 'https://upload-images.jianshu.io/upload_images/1864602-ec73f549171a6601.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240' }, methods: { // el 表示要執(zhí)行動畫的那個DOM元素, 是原生的 js DOM 對象 beforeEnter(el) { // 設(shè)置動畫開始之前的初始位置 el.style.transform = "translate(0, 0)" }, enter(el, done) { // 刷新動畫效果 el.offsetWidth; // 動畫完成后的樣式 el.style.transform = "translate(550px, 350px)"; // 動畫的持續(xù)時間 el.style.transition = "all 3s ease"; // done 其實是 afterEnter() 的引用 done(); }, afterEnter(el) { // 動畫完成之后調(diào)用 this.flag = !this.flag } } }) </script> </body> </html>
最終效果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 深入理解Vue父子組件生命周期執(zhí)行順序及鉤子函數(shù)
- 詳解Vue的鉤子函數(shù)(路由導(dǎo)航守衛(wèi)、keep-alive、生命周期鉤子)
- Vue手把手教你擼一個 beforeEnter 鉤子函數(shù)
- Vue指令的鉤子函數(shù)使用方法
- 深入理解Vue 的鉤子函數(shù)
- 解決Vue中mounted鉤子函數(shù)獲取節(jié)點高度出錯問題
- vue中各選項及鉤子函數(shù)執(zhí)行順序詳解
- vue中父子組件傳值,解決鉤子函數(shù)mounted只運(yùn)行一次的操作
- Vue的路由及路由鉤子函數(shù)的實現(xiàn)
- Vue3生命周期鉤子函數(shù)詳解
相關(guān)文章
vue3使用Pinia修改state的三種方法(直接修改,$patch,actions)
Vue3?Pinia是一個狀態(tài)管理庫,專門為Vue3設(shè)計優(yōu)化,它提供了一種簡單而強(qiáng)大的方式來管理應(yīng)用程序的狀態(tài),并且與Vue3的響應(yīng)式系統(tǒng)緊密集成,本文給大家介紹了vue3使用Pinia修改state的三種方法,需要的朋友可以參考下2024-03-03詳解vue3.2中setup語法糖<script?lang="ts"?setup>
Vue 3.2 引入了語法,這是一種稍微不那么冗長的聲明組件的方式,下面這篇文章主要介紹了詳解vue3.2中setup語法糖<script?lang="ts"setup>的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01淺析vue-router jquery和params傳參(接收參數(shù))$router $route的區(qū)別
今天做項目時踩到了vue-router傳參的坑(jquery和params),所以決定總結(jié)一下二者的區(qū)別。感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08vue調(diào)試工具vue-devtools安裝及使用方法
本文主要介紹 vue的調(diào)試工具 vue-devtools 的安裝和使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧2018-11-11vue3如何通過provide和inject實現(xiàn)多層級組件通信
這篇文章主要介紹了vue3如何通過provide和inject實現(xiàn)多層級組件通信,本文通過實例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11Vue.js第三天學(xué)習(xí)筆記(計算屬性computed)
這篇文章主要為大家詳細(xì)介紹了Vue.js第三天的學(xué)習(xí)筆記,vue.js計算屬性computed,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12