Vue前端開發(fā)之實現(xiàn)交錯過渡動畫效果
前言
通過自定義CSS樣式實現(xiàn)的動畫效果非常有限,還面臨瀏覽器的兼容性問題,因此,如果需要實現(xiàn)一些復雜的動畫效果,通常需要引入第三方庫來實現(xiàn),而gsap動畫平臺則是一個非常不錯的選擇,該平臺不僅支持簡單的動畫效果,而且還能實現(xiàn)復雜的列表動畫。
gsap 平臺可以針對所有的JavaScript 操作實現(xiàn)動畫效果,在transition-group組件中,為了監(jiān)聽動畫執(zhí)行的過程,提供了許多鉤子函數(shù),它們的功能如下表5-2所示。
需要說明的是,在enter 和 leave 函數(shù)中,需要調(diào)用第二個參數(shù) done,用于通知Vue框架,對應鉤子函數(shù)的動畫已經(jīng)執(zhí)行完成。
借助gsap動畫平臺,可以實現(xiàn)列表中各個元素的交錯切換的動畫效果,所謂的“交錯”,指的是多個元素在執(zhí)行動畫效果時,并不是一起執(zhí)行,而是一個接一個的排列執(zhí)行行。接下來通過一個簡單的示例來演示使用gsap實現(xiàn)交錯切換顯示的動畫列表效果。
實例5-7 列表中的交錯效果
1. 功能描述
在頁面模板中,分別添加一個文本框和一個列表元素,用戶在文本框中輸入內(nèi)容時,模糊查詢的內(nèi)容則顯示在列表中,當變更文本框內(nèi)容時,列表內(nèi)容則以交錯切換的動畫方式進行同步展示,文本框內(nèi)容為空時,則隱藏列表內(nèi)容。
2. 實現(xiàn)代碼
在項目components 文件夾的ch5子文件夾中,添加一個名為“GsapGroup”的.vue文件,在文件中加入如清單5-7所示代碼。
代碼清單5-7 GsapGroup.vue代碼
<template> <div class="action"> <div class="act"> <input type="text" v-model="search"> </div> <transition-group name="list" tag="ul" @before-enter="beforeEnter" @enter="handleEnter" @leave="handleLeave"> <li v-for="item in showUsers" :key="item" :data-index="index"> {{ item }} </li> </transition-group> </div> </template> <script> import gsap from 'gsap' export default { name: "TransGroup", data() { return { search: '', users: ['張三', '李四', '李小四', '張明明', '陳小豐'] }; }, computed: { showUsers() { if (this.search) { return this.users.filter(user => user.includes(this.search)) } else { return []; } } }, methods: { beforeEnter(el) { el.style.height = '0px' el.style.opacity = '0' }, handleEnter(el, done) { gsap.to(el, { height: '1.5em', opacity: 1, delay: el.dataset.index * 0.1, onComplete: done }) }, handleLeave(el, done) { gsap.to(el, { height: 0, opacity: 0, delay: el.dataset.index * 0.1, onComplete: done }) } } }; </script> <style scoped> ul { list-style: none; margin: 10px 0; padding: 0; width: 188px; } ul li { padding: 2px 0; } .action { width: 188px; } .action .act input { padding: 8px; } </style>
3. 頁面效果
保存代碼后,頁面在Chrome瀏覽器下執(zhí)行的頁面效果如圖5-8所示。
4. 源碼分析
在上述示例模板代碼中,transition-group組件分別綁定了before-enter、enter和leave三個鉤子函數(shù),在before-enter函數(shù)中,動畫元素高度和透明度都為0,即初始化動畫元素。
然后,在執(zhí)行enter函數(shù)時,設置動畫元素的高度值,并將透明度設置為1,表示顯示該元素,同時,獲取元素傳入的index值,作為計算動畫延時值的一部分,這種計算方式使每行的延時效果更加均勻,動畫執(zhí)行更加流暢。
此外,當動畫完成后,一定要在onComplete方法中執(zhí)行傳入的 done 函數(shù),用于通知Vue 框架,對應階段的動畫已執(zhí)行完成。
最后,執(zhí)行 leave 與 enter函數(shù)的流程基本相似,只是在leave 函數(shù)中會將動畫元素的高度和透明度的值都設置為0,表示隱藏該元素。
到此這篇關于Vue前端開發(fā)之實現(xiàn)交錯過渡動畫效果的文章就介紹到這了,更多相關Vue交錯過渡動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解讀計算屬性和watch監(jiān)聽的區(qū)別及說明
計算屬性是基于它們的依賴進行緩存的,只有在它的相關依賴發(fā)生改變時才會重新求值,而watch則是一個更為通用的監(jiān)聽器,它可以在數(shù)據(jù)變化時執(zhí)行異步操作或開銷較大的操作2025-01-01使用Vue+MySQL實現(xiàn)登錄注冊的實戰(zhàn)案例
第一次用Vue+MySQL實現(xiàn)注冊登錄功能,就已經(jīng)踩了很多坑,下面這篇文章主要給大家介紹了關于使用Vue+MySQL實現(xiàn)登錄注冊案例的相關資料,需要的朋友可以參考下2022-05-05vue axios 給生產(chǎn)環(huán)境和發(fā)布環(huán)境配置不同的接口地址(推薦)
這篇文章主要介紹了vue axios 給生產(chǎn)環(huán)境和發(fā)布環(huán)境配置不同的接口地址,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05vue3+vite加載本地js/json文件不能使用require淺析
這篇文章主要給大家介紹了關于vue3+vite加載本地js/json文件不能使用require的相關資料,require 是屬于 Webpack 的方法,在v3+vite的項目里面并不適用,需要的朋友可以參考下2023-07-07Vue-Router2.X多種路由實現(xiàn)方式總結(jié)
下面小編就為大家分享一篇Vue-Router2.X多種路由實現(xiàn)方式總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02vue在線預覽word、excel、pdf、txt、圖片的方法實例
最近工作中遇到了一個需要在線預覽文件的需求,所以這篇文章主要給大家介紹了vue在線預覽word、excel、pdf、txt、圖片的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-11-11