Vue 教程第九篇—— 動畫和過度效果

過渡效果

SPA 中組件的切換有一種生硬的隱藏顯示感覺,為了更好的用戶體驗,讓組件切換時淡出淡入,Vue 提供了專門的組件 transition。

過濾效果應用場景

  • 條件渲染 (使用 v-if)
  • 條件展示 (使用 v-show)
  • 動態組件
  • 組件根節點

過渡狀態

  • enter:定義進入過渡的開始狀態。在元素被插入時生效。
  • endter-active:定義過渡的狀態。在元素整個過渡過程中作用,在元素被插入時生效。
  • enter-to: 2.1.8版及以上 定義進入過渡的結束狀態。
  • leave:定義離開過渡的開始狀態。在離開過渡被觸發時生效。
  • leave-active:定義過渡的狀態。在元素整個過渡過程中作用,在離開過渡被觸發后立即生效。
  • leave-to: 2.1.8版及以上 定義離開過渡的結束狀態。

每個狀態在使用的時候都是在 CSS 中使用,結合組件 transition 的 name 屬性。如 <transition name="fade"></transition>,對應的是 fade- 加上每個狀態:fade-enter

CSS 過渡

使用到組件 transition 的屬性: name

<style type="text/css" media="screen">/*初始狀態*/.fade-enter{opacity: 0;}/*已經準備就緒*/.fade-enter-active{transition: all .5s;}/*已經消失*/.fade-leave-active{opacity: 0; transition: all .5s;}
</style><div id="app"><input type="button" :value="show ? 'hide' : 'show'" @click="show = !show" /><br/><transition name="fade"><img src="imgs/green.jpg" v-show="show" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果預覽

CSS 動畫

使用到組件 transition 的屬性: name

<style type="text/css" media="screen">.fade-enter-active{animation: fade-in .5s;}.fade-leave-active{animation: fade-out .5s;}@keyframes fade-in{from{opacity: 0;}to{opacity: 1;}}@keyframes fade-out{from{opacity: 1;}to{opacity: 0;}}
</style><div id="app"><input type="button" :value="show ? 'hide' : 'show'" @click="show = !show" /><br/><transition name="fade"><img src="imgs/green.jpg" v-if="show" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果預覽

初始渲染的過濾

第一次加載時的過渡效果,使用到組件 transition 的屬性: appear appear-class appear-active-class

<style type="text/css" media="screen">.fade-enter{opacity: 0;}.fade-enter-active{transition: all 3s;}
</style><div id="app"><transition appear appear-class="fade-enter" appear-active-class="fade-enter-active"><img src="imgs/green.jpg" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app'})
</script>

效果預覽

多個元素的過河效果

同時生效的進入和離開的過渡不能滿足所有要求,所以 Vue 提供了 過渡模式:

  • in-out:新元素先進行過渡,完成之后當前元素過渡離開。
  • out-in:當前元素先進行過渡,完成之后新元素過渡進入。

使用到組件 transition 的屬性: mode

<style type="text/css" media="screen">.fade-enter{opacity: 0;}.fade-enter-active{transition: all .5s;}.fade-leave-active{opacity: 0; transition: all .5s;}
</style><div id="app"><fieldset><legend><h3>mode = in-out</h3></legend><div><input type="button" :value="red ? 'green' : 'red'" @click="red = !red" /><br/><transition name="fade" mode="in-out">  <img src="imgs/red.jpg" v-if="red" key="red"/><img src="imgs/green.jpg" v-else key="green"/></transition>           </div></fieldset><fieldset><legend><h3>mode = out-in</h3></legend><div><input type="button" :value="flag == 1 ? 'green' : flag == 2 ? 'yellw' : 'red'" @click="flag = flag == 1 ? 2 : flag == 2 ? 3 : 1" /><br/><transition name="fade" mode="out-in">  <img src="imgs/red.jpg" v-if="flag == 1" key="red"/><img src="imgs/green.jpg" v-else-if="flag == 2" key="green"/><img src="imgs/yellow.jpg" v-else key="yellow" /></transition>               </div></fieldset> 
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {red: true,flag: 1}})
</script>

效果預覽

列表(v-for)的過渡效果

v-for 生成列表過渡效果要使用組件 transition-group,組件提供屬性 tag 表示該組件將會渲染成對應的 DOM 節點,其它的使用和 transition 一樣。

<style type="text/css" media="screen">*{list-style: none;}li{width: 300px; margin-bottom: 5px; padding: 10px 20px; background-color: #ccc;}.list-enter{opacity: 0; transform: translateX(300px);}.list-enter-active{transition: all .5s;}.list-leave-active{transition: all .5s; opacity: 0; transform: translateX(-300px);}
</style><div id="app"><p><input type="button" value="AddItem" @click="addItem"><input type="button" value="RemoveItem" @click="removeItem"></p><transition-group tag="ul" name="list"><li v-for="(item, index) in items" :key="item">Item {{index}}</li></transition-group>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {items: [1,2,3]},methods: {randomIndex: function(){return  parseInt(this.items.length * Math.random());},addItem: function(){this.items.splice(this.randomIndex(), 0, this.items.length + 1);},removeItem: function(){this.items.splice(this.randomIndex(), 1);}}})
</script>

效果預覽

自定義過渡的類名

我們可以通過以下特性來自定義過渡類名:

  • enter-class
  • enter-active-class
  • enter-to-class (2.1.8+)
  • leave-class
  • leave-active-class
  • leave-to-class (2.1.8+)

他們的優先級高于普通的類名,這對于 Vue 的過渡系統和其他第三方 CSS 動畫庫,如 Animate.css 結合使用十分有用。

<link rel="stylesheet" type="text/css" href="animate.css"><div id="app"><button @click="show = !show">Toggle render</button><transition enter-active-class="animated jello" leave-active-class="animated bounceOutRight"><div v-if="show"><img src="./imgs/green.jpg" /></div></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果預覽

過渡效果鉤子函數

除了用CSS過渡的動畫來實現vue的組件過渡,還可以用JavaScript的鉤子函數來實現,在鉤子函數中直接操作DOM。我們可以在屬性中聲明以下鉤子:

<transitionv-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>
<script type="text/javascript">var vm = new Vue({el: '#app',methods: {// 過渡進入// 設置過渡進入之前的組件狀態beforeEnter: function (el) {// ...},// 設置過渡進入完成時的組件狀態enter: function (el, done) {// ...done()},// 設置過渡進入完成之后的組件狀態afterEnter: function (el) {// ...},enterCancelled: function (el) {// ...},// 過渡離開// 設置過渡離開之前的組件狀態beforeLeave: function (el) {// ...},// 設置過渡離開完成時地組件狀態leave: function (el, done) {// ...done()},// 設置過渡離開完成之后的組件狀態afterLeave: function (el) {// ...},// leaveCancelled 只用于 v-show 中leaveCancelled: function (el) {// ...}}})
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254857.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

halcon create_ocr_class_svm 使用SVM分類器創建OCR分類器

目錄create_ocr_class_svm&#xff08;算子&#xff09;描述參數create_ocr_class_svm&#xff08;算子&#xff09; create_ocr_class_svm - 使用支持隨機向量機制創建OCR分類器。 create_ocr_class_svm&#xff08;:: WidthCharacter&#xff0c;HeightCharacter&#xff0…

碼率跟視頻質量有關系

碼率跟視頻質量有關系.首先要清楚, 相同的視頻編碼方式下, 碼率越高肯定畫面越清晰. 但是高到一定值, 再往上的畫面改善程度就不明顯了, 只會增大文件體積. 所以碼率選的合適, 才可以保證清晰度又保持文件不會太大. 個人經驗如果是h.264編碼(當前最好的視頻壓縮編碼方案), …

SQL 字符串分割表函數

1 --字符串分割表函數2 declare str varchar(1000)3 declare split varchar(10) 4 5 declare i int;6 declare count int;7 8 declare ChildStr varchar(1000);9 declare splitStr varchar(1000); 10 declare Index int; 11 12 declare table as table (rowId int,splitStr va…

語句:分支語句、switch case ——7月22日

語句的類型包括&#xff1a;聲明語句、表達式語句、選擇語句、循環語句、跳轉語句、異常語句 1&#xff0e;聲明語句引&#xff1a;入新的變量或常量。 變量聲明可以選擇為變量賦值。 在常量聲明中必須賦值。 例如&#xff1a; int i 0;//聲明變量i 并賦值&#xff0c;也可以不…

halcon write_ocr_trainf 將訓練字符存儲到文件中

目錄write_ocr_trainf&#xff08;運算符&#xff09;描述參數write_ocr_trainf&#xff08;運算符&#xff09; write_ocr_trainf - 將訓練字符存儲到文件中。 write_ocr_trainf&#xff08;Character&#xff0c;Image :: Class&#xff0c;TrainingFile ? 描述 運算符w…

碼率計算文章

http://bbs.dvbcn.com/showtopic-41431-1.html

PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (遞歸查詢變態優化) 非驅動列索引掃描優化...

標簽 PostgreSQL , Oracle , index skip scan , 非驅動列條件 , 遞歸查詢 , 子樹 背景 對于輸入條件在復合索引中為非驅動列的&#xff0c;如何高效的利用索引掃描&#xff1f; 在Oracle中可以使用index skip scan來實現這類CASE的高效掃描&#xff1a; INDEX跳躍掃描一般用在W…

如何確定鏡頭CCD靶面尺寸?

在組建機器視覺系統時&#xff0c;需要選用適合實際應用的產品。今天&#xff0c;中國機器視覺商城的培訓課堂為您帶來的是關于工業鏡頭CCD靶面尺寸的確定方法。 在選擇鏡頭時&#xff0c;我們通常要注意一個原則&#xff1a;即小尺寸靶面的CCD可使用對應規格更大的鏡頭&#x…

lua去掉字符串中的UTF-8的BOM三個字節

廢話不多說&#xff0c;還是先說點吧&#xff0c;項目中lua讀取的text文件如果有BOM&#xff0c;客戶端解析就會報錯&#xff0c;所以我看了看&#xff0c;任務編輯器swGameTaskEditor 在寫入文件的時候&#xff0c;也不知道為什么有的文件就是UTF-8BOM格式&#xff1b;但一般都…

JQuery對象與DOM對象的區別與轉換

1.jQuery對象和DOM對象的區別 DOM對象&#xff0c;即是我們用傳統的方法(javascript)獲得的對象&#xff0c;jQuery對象即是用jQuery類庫的選擇器獲得的對象; eg: var domObj document.getElementById("id"); //DOM對象var $obj $("#id"); //jQuery對象;…

halcon append_ocr_trainf 將字符添加到訓練文件中

目錄append_ocr_trainf&#xff08;算子&#xff09;描述參數append_ocr_trainf&#xff08;算子&#xff09; append_ocr_trainf - 將字符添加到訓練文件中。 append_ocr_trainf&#xff08;Character&#xff0c;Image :: Class&#xff0c;TrainingFile ? 描述 運算符a…

CCD 尺寸

CCD&#xff08;包括CMOS感光元件&#xff09;的面積是按其矩形對角線英寸長度為指標的。這和定義電視屏幕尺寸類似。一英寸是25.4毫米。1/2.0英寸、1/1.8都是指CCD 對角線有多少分之一英寸長&#xff0c;分母小的其分數值就大&#xff0c;相應感光元件面積也大。 1/2.…

Quagga的安裝碰到的問題

1.如果出現以下錯誤&#xff1a; vtysh: symbol lookup error: /usr/local/lib/libreadline.so.6: undefined symbol: UP 解決方法如下: 1.rootlocalhost:~ # cd /usr/local/lib 2.rootlocalhost:/usr/local/lib# ls -la libreadline* 3.rootlocalhost:/usr/local/lib# mkd…

X264電影壓縮率畫質

X264電影壓縮率畫質全對比&#xff1a; http://www.mov8.com/dvd/freetalk_show.asp?id29778

halcon read_ocr_trainf 從文件中讀取訓練字符并轉換為圖像

目錄read_ocr_trainf&#xff08;算子&#xff09;描述參數read_ocr_trainf&#xff08;算子&#xff09; read_ocr_trainf - 從文件中讀取訓練字符并轉換為圖像。 read_ocr_trainf&#xff08;&#xff1a;Characters&#xff1a;TrainingFile&#xff1a;CharacterNames&am…

(十二)洞悉linux下的Netfilteramp;iptables:iptables命令行工具源碼解析【下】

iptables用戶空間和內核空間的交互 iptables目前已經支持IPv4和IPv6兩個版本了&#xff0c;因此它在實現上也需要同時兼容這兩個版本。iptables-1.4.0在這方面做了很好的設計&#xff0c;主要是由libiptc庫來實現。libiptc是iptables control library的簡稱&#xff0c;是Netfi…

Linux 下實現普通用戶只能寫入某個目錄

今天老婆問了我一個問題&#xff1a;如何在linux 下實現某個目錄普通用戶能夠寫入文件&#xff0c;但是不能刪除或修改&#xff08;只能由root 刪除或修改&#xff09;。開始的兩分鐘里&#xff0c;我初步判斷這是做不到的&#xff0c;因為linux 下能 寫入&#xff08;w&#x…

CCD和CMOS攝像頭成像原理以及其他區別

&#xfeff;&#xfeff;CCD的第二層是分色濾色片&#xff0c;目前有兩種分色方式&#xff0c;一是RGB原色分色法&#xff0c;另一個則是CMYG補色分色法&#xff0c;這兩種方法各有利弊。不過以產量來看&#xff0c;原色和補色CCD的比例大約在2&#xff1a;1左右。原色CCD的優…

FFMPEG分析比較細的文章

http://blog.csdn.net/ym012/article/details/6538301

恢復Ext3下被刪除的文件(轉)

前言 下面是這個教程將教你如何在Ext3的文件系統中恢復被rm掉的文件。 刪除文件 假設我們有一個文件名叫 ‘test.txt’ $ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt 注意&#xff1a;: “-il” 選項表示顯示文件的i-node號&#xff08;15&#xff09;…