Vue過渡和動畫效果展示(案例、GIF動圖演示、附源碼)

来源:https://www.cnblogs.com/zbcxy506/archive/2022/04/25/note_1vue-05.html
-Advertisement-
Play Games

本篇文章主要寫了Vue過渡和動畫基礎、多個元素過渡和多個組件過渡,以及列表過渡的動畫效果展示。詳細案例分析、GIF動圖演示、附源碼地址獲取。 ...


前言

本篇隨筆主要寫了Vue過渡和動畫基礎、多個元素過渡和多個組件過渡,以及列表過渡的動畫效果展示。詳細案例分析、GIF動圖演示、附源碼地址獲取。

作為自己對Vue過渡和動畫效果知識的總結與筆記。

因內容有案例解讀,代碼實現,導致篇幅稍長,大約3分鐘可以瀏覽完,如有需要的話(請筆友耐心看完,也可按目錄查找所需內容)

如需要全部案例代碼:請到文章末尾獲取(百度網盤鏈接,全套案例源碼

 

案例實現模版:

PS: 點擊模版後的 -->  這個標誌可以瀏覽目錄結構,以便快速定位需要的內容

以下案例均是基於此模版實現的(以第一個案例為例)

效果展示:

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 8     <title>Document</title>
 9     <!-- 此處為引用JS、CSS等文件區、且css,文件與html文件在同一目錄下 -->
10     <script src="velocity.js"></script>
11     <script src="vue.js"></script>
12     <script src="velocity.min.js"></script>
13     <script src="lodash.js"></script>
14     <script src="lodash.min.js"></script>
15 
16     <link rel="stylesheet" href="animate.css">
17     <link rel="stylesheet" href="animate.min.css">
18 
19     <!-- 此處為樣式引用 -->
20     <style>
21         /* 圖形的初始狀態 */
22         .chart {
23             width: 200px;
24             height: 50px;
25             background-color: orange;
26         }
27 
28         /* 進入和離開的過程 */
29         .box-enter-active,
30         .box-leave-active {
31             transition: width 3s;
32             /* width的變化,動畫時間是3秒 */
33         }
34 
35         /* 進入初始狀態 和 離開的結束狀態*/
36         .box-enter,
37         .box-leave-to {
38             width: 0px;
39         }
40 
41         /* 進入的結束狀態 和 離開的初始狀態 */
42         .box-enter-to,
43         .box-leave {
44             width: 200px;
45         }
46     </style>
47 </head>
48 
49 <body>
50 
51     <!-- 此處為主代碼區 -->
52     <div id="app">
53         <button @click="toggle">改變圖形寬度</button>
54         <transition name="box">
55             <div class="chart" v-if="show"></div>
56         </transition>
57     </div>
58     <script>
59         var vm = new Vue({
60             el: '#app',
61             data: {
62                 show: true,
63             },
64             methods: {
65                 toggle() {
66                     this.show = !this.show   // 每次都取反
67                 }
68             }
69         })
70     </script>
71 
72 </body>
73 
74 </html>

一、Vue過渡和動畫基礎

1.什麼是過渡和動畫

過渡,簡而言之,就是從一個狀態向另外一個狀態插入值,新的狀態替換了舊的狀態。

通過<transition>標簽搭配CSS動畫(如@keyframes)可以實現動畫效果。動畫相比過渡來說,動畫可以在一個聲明中設置多個狀態,例如,可以在動畫20%的位置設置一個關鍵幀,然後在動畫50%的位置設置一個完全不同的狀態。另外,<transition>標簽還提供了一些鉤子函數,可以結合JavaScript代碼來完成動畫效果。

(1)代碼:

 1   <style>
 2     /* 圖形的初始狀態 */
 3     .chart {
 4       width: 200px;
 5       height: 50px;
 6       background-color: orange;
 7     }
 8     /* 進入和離開的過程 */
 9     .box-enter-active, .box-leave-active {
10       transition: width 3s;  /* width的變化,動畫時間是3秒 */
11     }
12     /* 進入初始狀態 和 離開的結束狀態*/
13     .box-enter, .box-leave-to {
14       width: 0px;
15     } 
16     /* 進入的結束狀態 和 離開的初始狀態 */
17     .box-enter-to, .box-leave {
18       width: 200px;
19     }
20   </style>
21   <script src="vue.js"></script>
22 </head>
23 <body>
24   <div id="app">
25     <button @click="toggle">改變圖形寬度</button>
26     <transition name="box">
27       <div class="chart" v-if="show"></div>
28     </transition>
29   </div>
30   <script>
31     var vm = new Vue({
32       el: '#app',
33       data: {
34         show: true,
35       },
36       methods: {
37         toggle () {
38           this.show = !this.show   // 每次都取反
39         }
40       }
41     })
42  </script>

(2)效果展示:

2.transition組件

Vue為<transition>標簽內部的元素提供了3個進入過渡的類和3個離開過渡的類,

過渡類型

說明

v-enter

進入過渡的開始狀態,作用於開始的一幀

v-enter-active

進入過渡生效時的狀態,作用於整個過程

v-enter-to

進入過渡的結束狀態,作用於結束的一幀

v-leave

離開過渡的開始狀態,作用於開始的一幀

v-leave-active

離開過渡生效時的狀態,作用於整個過程

v-leave-to

離開過渡的結束狀態,作用於結束的一幀

上表中6個CSS類名在進入和離開的過渡中切換的存在周期如下圖所示:

3.自定義類名

Vue中的transition組件允許使用自定義的類名。如果使用自定義類名,則不需要給<transition>標簽設置name屬性。自定義類名是通過屬性來設置的,具體屬性如下。

  • 進入:enter-class、 enter-active-class、 enter-to-class
  • 離開:leave-class、 leave-active-class、 leave-to-class

自定義類名的優先順序高於普通類名,所以能夠很好地與其他第三方CSS庫結合使用。 animate.css是一個跨瀏覽器的CSS3動畫庫,它內置了很多經典的CSS3動畫,使用起來很方便。接下來,我們將通過animate.css動畫庫來演示自定義類名的使用。

(1)實現步驟:

  • 下載並引入animate.css動畫庫

首先從官方網站獲取animate.css文件,保存到文件目錄中。其次創建html文件,併在文件中引入animate.css文件

  • 編寫HTML結構代碼

animated是基本的類名,bounceInLeft是動畫的類名

  • 編寫JavaScript代碼

(2)代碼:

 1 <div id="app">
 2     <button @click="show=!show">顯示/隱藏</button>
 3     <transition enter-active-class="animated bounceInLeft"
 4      leave-active-class="animated bounceOutLeft">
 5       <p v-if="show">過渡文字效果</div>
 6     </transition>
 7   </div>
 8   <script>
 9     var vm = new Vue({
10       el: '#app',
11       data: { show: true }
12     })
13  </script>

註意:

動畫效果都是在事件處理方法中控制的,在元素初始渲染時(頁面剛打開時)並沒有動畫效果。可以通過給transition組件設置appear屬性來給元素添加初始渲染的動畫效果。

(3)效果展示:

改:

 1  <div id="app">
 2     <button @click="show=!show">顯示/隱藏</button>
 3     <transition appear appear-active-class="animated swing"
 4      enter-active-class="animated bounceIn"
 5      leave-active-class="animated bounceOut">
 6       <div v-if="show">過渡文字效果</div>
 7     </transition>
 8   </div>
 9   <script>
10     var vm = new Vue({ el: '#app', data: { show: true } })
11   </script>

上述代碼中,appear表示開啟此特性,appear-class表示初始class樣式,appear-to-class表示過渡完成的class樣式,appear-active-class會應用在整個過渡過程中。

(3)效果展示:

4.使用@keyframes創建CSS動畫

(1)實現步驟:

@keyframes規則創建動畫,就是將一套CSS樣式逐步演變成另一套樣式,在創建動畫過程中,可以多次改變CSS樣式,通過百分比或關鍵詞from和to(等價於0%和100%)來規定動畫的狀態。

(2)代碼:

 1   <style>
 2     div.circular {
 3       width: 100px;
 4       height: 100px;
 5       background: red;
 6       border-radius: 50%;
 7       margin-top: 20px;
 8       text-align: center;
 9       line-height: 100px;
10       color: #fff;
11     }
12     .bounce-enter-active {
13       animation: Ami .5s;
14     }
15     .bounce-leave-active {
16       animation: Ami .5s;
17     }
18     @keyframes Ami {
19       0% {transform: scale(0); background: red;}
20       20% {transform: scale(1); background: burlywood;}
21       50% {transform: scale(1.5); background: blueviolet;}
22       100% {transform: scale(1); background: burlywood;}
23     }
24   </style>
25   <script src="vue.js"></script>
26 </head>
27 <body>
28   <div id="app">
29     <button @click="show=!show">使用@keyframes創建CSS動畫</button>
30     <transition name="bounce">
31       <div class="circular" v-if="show">圓形</div>
32     </transition>
33   </div>
34   <script>
35     var vm = new Vue({ el: '#app', data: { show: true } })
36   </script>

(3)效果展示:

5.鉤子函數實現動畫

(1)實現步驟:

在<transition>標簽中定義了一些動畫鉤子函數,用來實現動畫。鉤子函數可以結合CSS過渡(transitions)、動畫(animations)使用,還可以單獨使用。

(2)代碼:

 1  <div id="app">
 2     <transition
 3       @before-enter="beforeEnter"
 4       @enter="enter"
 5       @after-enter="afterEnter"
 6       @enter-cancelled="enterCancelled"
 7       @before-leave	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分享嘉賓:張建 PingCAP TiDB優化器與執行引擎技術負責人 編輯整理:Druid中國用戶組第6次大數據MeetUp 出品平臺:DataFunTalk 導讀: 本次報告張老師主要從原理上帶大家深入瞭解 TiDB SQL 優化器中的關鍵模塊,比如應用一堆邏輯優化規則的邏輯優化部分,基於代價的物理 ...
  • 作者:程潤科、錢芬 視頻:錢芬 上一篇文章我們演示瞭如何快速實現 MySQL 高可用集群部署,以及部署集群的校驗和卸載方式。本文將演示如何對集群進行備份和恢復。 部署版本為 RadonDB MySQL Kubernetes 2.1.3。 環境準備 首先準備一套 Kubernetes 集群,過程略。然 ...
  • 前言 上篇文章《Android安卓進階技術分享之AGP工作原理》和大家分析了 AGP(Android Gradle Plugin) 做了哪些事,瞭解到 AGP 就是為打包這個過程服務的。 那麼,本篇文章就和大家聊一聊其中的 Transform,解決一下為什麼在 AGP 3.x.x 的版本可以通過反射 ...
  • Hello HarmonyOS進階系列(應用篇),聚焦HarmonyOS應用開發,連志安、唐佐林、徐禮文、李寧、李洋、夏德旺、潘凌越等7位技術大咖將傾情分享如何基於HarmonyOS系統成功開發應用,在智能家居、智慧辦公、智慧出行、運動健康、影音娛樂等領域賦能開發者。 ...
  • 4 月 25 日,“共建新技術,開拓新領域”OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)技術日在深圳順利召開。 ...
  • 超級終端中,設備的能力和狀態如何管理?設備之間如何進行信息協同?要回答這些問題,就不得不提我們本期的主角——DeviceProfile。 ...
  • HMS Core地圖服務(Map Kit)給開發者提供一套地圖開發調用的SDK,助力全球開發者實現個性化地圖呈現與交互,方便輕鬆地在應用中集成地圖相關的功能,全方位提升用戶體驗。 在日常工作中,我們會收到很多開發者們留言集成地圖服務中遇到的問題,這裡我們將典型問題進行分享和總結,希望為其他遇到類似問 ...
  • 由於javascript是單線程的執行模型,因此為了提高效率就有了非同步編程,單線程在程式執行時,所走的程式路徑按照連續順序排下來,前面的必須處理好,後面的才會執行。 但是我們也需要類似多線程機制的這種執行方式,我們需要非同步執行編程,非同步執行編程會使得多個任務併發執行。 非同步編程可以實現多任務併發執行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...