Vue 內置組件 transition 以及過渡動畫

2021-12-10 OrzR3

概述

Vue 提供了 transition 的封裝組件,在下列情形中,可以給任何元素和組件添加進入/離開過渡。

主要用於 v-show, v-if 或 router-view 的過渡動畫,分為進場和出場。

官方示例

<template>  <div id="example">    <button @click="show = !show">      Toggle render    </button>    <transition name="slide-fade">      <p v-if="show">hello</p>    </transition>  </div></template>
<script>export default { data () { return { show: true } }}</script>
<style lang="scss">.slide-fade-enter-active { transition: all .3s ease;}.slide-fade-leave-active { transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);}.slide-fade-enter, .slide-fade-leave-to { transform: translateX(10px); opacity: 0;}</style>

過渡的類名

在進入/離開的過渡中,會有 6 個 class 切換。

v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素被插入之後的下一幀移除。

v-enter-active:定義進入過渡生效時的狀態。在整個進入過渡的階段中應用,在元素被插入之前生效,在過渡/動畫完成之後移除。這個類可以被用來定義進入過渡的過程時間,延遲和曲線函數。

v-enter-to:2.1.8 版及以上定義進入過渡的結束狀態。在元素被插入之後下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之後移除。

v-leave:定義離開過渡的開始狀態。在離開過渡被觸發時立刻生效,下一幀被移除。

v-leave-active:定義離開過渡生效時的狀態。在整個離開過渡的階段中應用,在離開過渡被觸發時立刻生效,在過渡/動畫完成之後移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函數。

v-leave-to:2.1.8 版及以上定義離開過渡的結束狀態。在離開過渡被觸發之後下一幀生效 (與此同時 v-leave 被刪除),在過渡/動畫完成之後移除。


給transition組件設置不同的name

對於這些在過渡中切換的類名來說,如果你使用一個沒有名字的 <transition>,則 v- 是這些類名的默認前綴。

如果你使用了 <transition name="my-transition">,那麼 v-enter 會替換為 my-transition-enter。

在Vue頁面通過watch監聽路由的變化,給transition組件設置不同的name,從而實現不同的過渡動畫。

<template>  <div id="home">    <transition :name="transitionName">      <keep-alive>        <router-view></router-view>      </keep-alive>    </transition>  </div></template>
<script>export default { name: "Demo", components: { }, data() { return { transitionName: "", }; }, watch: { $route(to, from) { if (to.meta.index > from.meta.index) { this.transitionName = "slide-left"; } if(to.meta.index < from.meta.index){ this.transitionName = "slide-right"; } if (to.meta.index = from.meta.index) { this.transitionName = "slide-com"; } else { this.transitionName = "slide-back"; } }, },};</script><style scoped></style>

css屬性transition

    

過渡用的專場動畫,通常就是,淡入淡出,放大縮小,或者左右側進出。

通過css的transition屬性來實現。

1.transition簡介

css屬性transition能讓頁面元素不是立即的、而是慢慢的從一種狀態變成另外一種狀態,從而表現出一種動畫過程。

根據開始狀態和結束狀態的具體數值,計算出中間狀態。

2.transition屬性語法

屬性

介紹

transition-property

規定設置過渡效果的 CSS 屬性的名稱。

例如, opacity,color。默認值是all。

transition-duration

規定完成過渡效果需要多少秒或毫秒。

例如,1s。默認值是0s。

transition-timing-function

規定速度效果的速度曲線。

例如, linear、 ease-in、steps動畫分段函數或自定義的 cubic-bezier 函數)。默認值是ease,中間快,兩頭慢。

transition-delay

定義過渡效果何時開始。

例如,1s。默認值是0s。

transition-property

規定設置過渡效果的 CSS 屬性的名稱。

例如, opacity,color。默認值是all。

transition-duration

規定完成過渡效果需要多少秒或毫秒。

例如,1s。默認值是0s。

transition-timing-function

規定速度效果的速度曲線。

例如, linear、 ease-in、steps動畫分段函數或自定義的 cubic-bezier 函數)。

默認值是ease,中間快,兩頭慢。

transition-delay

屬性指定何時將開始切換效果。

transition-delay值是指以秒為單位(S)或毫秒(ms)

示例代碼

div {  width: 100px;  height: 100px;  background-color: orange;  margin: 20px auto;  border-radius: 100%;  -webkit-transition-property: -webkit-border-radius;  transition-property: border-radius;  -webkit-transition-duration: 3s;  transition-duration: 3s;  -webkit-transition-timing-function:ease; transition-timing-function:ease; div:hover {  border-radius: 0px;}

3.transition屬性語法簡寫

transition-property

transition-duration

transition-timing-function

transition-delay

以上,這四個屬性,可以簡寫在一行代碼裡面,如下所示

transition: property duration timing-function delay;

4.瀏覽器支持

transition 是css3中的屬性。僅支持以下瀏覽器:

Internet Explorer 10+

Firefox

Opera

Chrome

Internet Explorer 9 以及更早版本的瀏覽器不支持 transition 屬性。

ps:安利一下Animate.css 一款強大的預設css3動畫庫

https://animate.style/

優缺點

transition使用簡單,能較好的實現過渡動畫。

但是,無法處理一個組件中父子元素的聯動動畫。查看源碼後,就可以知道原因。因為,本質上他只能作用於特定指令所影響的特定元素。

PS:安利一個github上頁面過渡插件

https://github.com/repairearth/vue-router-transition

參考文章

Vue 源碼解析之一:transition

https://blog.csdn.net/weixin_34396103/article/details/89412044

CSS transition 屬性

https://www.w3school.com.cn/cssref/pr_transition.asp

相關焦點

  • 通過示例了解Vue過渡和動畫
    Vue過渡和動畫讓我們網站更具現代感並為網站訪問者提供更好的用戶體驗的好方法。幸運的是,對於開發人員而言,Vue動畫只需幾分鐘即可完成設置。文本主要介紹 Vue <transition>元素,使用該元素創建一些Vue動畫,並了解將其添加到項目中的基本知識。
  • CSS3動畫、Vue過渡
    : infinite)網頁效果圖如下:2.CSS3的transition過渡關鍵在於transition屬性,設置動畫的過渡狀態,如:.box2{ width: 100px; height: 100px; background-color #192F60
  • 關於Vue.js的v-for,key的順序改變,影響過渡動畫表現
    關於Vue.js的v-for,key的順序改變,影響過渡動畫表現關於
  • 一文帶你看CSS過渡動畫藝術,附帶常見動效分享
    組件庫,總結出了一些動畫較為合理的時間把控程度。**交互動畫:**涉及到多個元素之間可能發生序列的動畫,稱之為交互動畫。**轉場動畫:**頁面與頁面之間的切換,稱之為轉場動畫。呈現方式在 CSS 中,對於動畫的產生有兩個 API , transition , animation 都可能定義過渡動畫。但是兩者的區別是很大的。transition  只能聲明元素變化從開始到結束之間的變化關係。
  • 優美的v-for列表加載動畫:vue動畫鉤子實踐
    原文轉自 優美的v-for列表加載動畫:vue動畫鉤子實踐 https://juejin.im/post/6869195042599206919最近忙完工作,重新擼了一遍vue官方文檔,發現很少被我用到的vue動畫神器,JavaScript鉤子函數
  • 精通react/vue組件設計之配合React Portals實現一個(Drawer)組件
    通過組件的設計過程,大家會接觸到一個完成健壯的組件設計思路和方法,也能在實現組件的過程逐漸對react/vue的高級知識和技巧有更深的理解和掌握,並且在企業實際工作做遊刃有餘.作為數據驅動的領導者react/vue等MVVM框架的出現,幫我們減少了工作中大量的冗餘代碼, 一切皆組件的思想深得人心.
  • Vue.js深入學習
    3.在beforeMount()函數執行的時候,模版已經在內存中編輯好了,但是尚未掛載到頁面中去,此時,頁面還是舊的4.mounted()表示內存中的模版已經真實的掛載到了頁面中,用戶已經可以看到渲染好的頁面了,是實例創建期間的最後一個生命周期函數,當執行完mounted就表示整個Vue實例已經初始化完畢了,此時,組件已經脫離了創建階段進入到了運行階段
  • vue 渲染函數插槽專題及常見問題 - CSDN
    插槽是Vue組件的一種機制,它允許你以一種不同於嚴格的父子關係的方式組合組件。插槽為你提供了一個將內容放置到新位置或使組件更通用的出口。從一個簡單的例子開始:// frame.vue這個組件最外層是一個div。假設div的存在是為了圍繞其內容創建一個樣式框架。這個組件可以通用地用於將框架包圍在wq你想要的任何內容上,來看看它是怎麼用的。
  • 阿里媽媽又做了新工具,幫你把 Vue2 代碼改成 Vue3 的
    其實 Vue 團隊已經儘可能地減少了破壞性更新,還提供了一份細緻的遷移指南[1],條數不少,但定睛一看,大部分都是體力活,有些很簡單,比如異步組件要多包上一層:還有一些就改起來有點麻煩,比如自定義指令生命周期的更名,和傳入參數的一些細微變化:
  • 《精通react/vue組件設計》之快速實現一個可定製的進度條組件
    而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.作為數據驅動的領導者react/vue等MVVM框架的出現,幫我們減少了工作中大量的冗餘代碼, 一切皆組件的思想深得人心.所以, 為了讓工程師們有更多的時間去考慮業務和產品迭代,我們不得不掌握高質量組件設計的思路和方法.所以筆者將花時間去總結各種業務場景下的組件的設計思路和方法,並用原生框架的語法去實現各種常用組件的開發,希望等讓前端新手或者有一定工作經驗的朋友能有所收穫
  • 公眾號h5動畫雜記
    2transition組件在H5動畫的互動設計中,每個頁面都有一定的轉場動畫,Vue提供的transition抽象組件用來做頁面轉場動畫很合適,所以每一屏都是一個獨立的頁面組件並藉助transition組件包裹router-view組件來實現轉場效果<transition :name="transitionName
  • 這幾款基於 vue3 和 vite 的開箱即用的中後臺管理模版,讓你 yyds !
    我們都知道 vue3 已經發布一年多了,相關的生態也在慢慢建立,很多公司也在嘗試用 vue3 來開發自己的應用系統。但是由於生態的不完善以及缺乏成熟方案的落地,vue3 的應用仍然探索和小規模試驗中。好在開源界無私奉獻的大佬們提前做了很多探索和嘗試,比如面向 vue3 的 UI 組件庫 element Plus,ant-desigin-vue 等,同時基於這些 UI 庫,又有一批大佬封裝了針對企業業務場景的中後臺管理模版,方便我們高效的搭建業務系統。
  • 如何寫一個vue組件專題及常見問題 - CSDN
    轉自:https://www.cnblogs.com/pengchenggang/p/10880437.html如何寫好一個vue組件一個適用性良好的組件,一種是可配置項很多,另一種就是容易覆寫,從而擴展功能Vue 組件的 API 來自三部分——prop、事件和插槽:prop 允許外部環境傳遞數據給組件event 允許從組件內觸發外部環境的副作用slot
  • 《精通react/vue組件設計》之實現一個健壯的警告提示(Alert)組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文是筆者寫組件設計的第七篇文章, 今天帶大家實現一個自帶主題且可關閉的Alert組件, 該組件在諸如Antd或者elementUI等第三方組件庫中都會出現,主要用來提供系統的用戶反饋
  • 史上最全 Vue 前端代碼風格指南
    |- index.js|- plugin.js|- util.js|- date-util.js|- account-model.js|- collapse-transition.js複製代碼上述規則可以快速記憶為「靜態文件下劃線,編譯文件短橫線」。
  • CSS動畫:animation、transition、transform、translate傻傻分不清
    容易混淆的幾個css屬性css屬性很多,並且有些無論是字母的拼寫還是字面上的意思,都容易混淆,比如我列出來的幾個屬性,是不是也混淆過你~屬性含義animation(動畫)用於設置動畫屬性,他是一個簡寫的屬性,包含6個屬性transition(過渡)用於設置元素的樣式過度,和animation有著類似的效果,但細節上有很大的不同transform
  • 精通react/vue組件設計之實現一個Tag(標籤)和Empty(空狀態)組件
    "辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.作為數據驅動的領導者react/vue等MVVM框架的出現,幫我們減少了工作中大量的冗餘代碼, 一切皆組件的思想深得人心.所以, 為了讓工程師們有更多的時間去考慮業務和產品迭代,我們不得不掌握高質量組件設計的思路和方法.所以筆者將花時間去總結各種業務場景下的組件的設計思路和方法,並用原生框架的語法去實現各種常用組件的開發,希望等讓前端新手或者有一定工作經驗的朋友能有所收穫
  • 技術分享:vue 過濾器
    vue 過濾器 1 關於 vue 過濾器 在vue1.0的時候其實是內置了過濾器的,但是考慮到好多過濾器並不一定會被開發所調用,所以把原本內置的過濾器就給去掉了,但是過濾器還是比較普遍的,所以我們從vue2.0之後就需要自己定義過濾器
  • 使用 Material Design 組件實現 Material 動效
    Android 平臺https://developer.android.google.cn/reference/android/transition/package-summaryAndroidX 過渡系統https://developer.android.google.cn/reference/androidx/transition/package-summary本文會介紹上面每種模式
  • Vue 仿探探拖拽卡片的效果
    已更新Vue3版,請給 前端大全 發送關鍵字 vue3仿探探 獲取Vue3版類似Tinder和探探的卡片效果的組件,社區中已經非常多了。我這一版除了可以實現和他們一樣的效果外。還增加了飛卡的效果,就是類似我的女神邱淑貞這樣。