亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue學習筆記進階篇之單元素過度

2019-11-19 16:02:31
字體:
來源:轉載
供稿:網友

概述

Vue 在插入、更新或者移除 DOM 時,提供多種不同方式的應用過渡效果。

包括以下工具:

  1. 在 CSS 過渡和動畫中自動應用 class
  2. 可以配合使用第三方 CSS 動畫庫,如 Animate.css
  3. 在過渡鉤子函數中使用 JavaScript 直接操作 DOM
  4. 可以配合使用第三方 JavaScript 動畫庫,如 Velocity.js

單元素/組件的過度

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

  1. 條件渲染 (使用 v-if)
  2. 條件展示 (使用 v-show)
  3. 動態組件
  4. 組件根節點

這里是一個典型的例子:

<div id="app1">  <button @click="show = !show">toggle</button>  <transition name="fade">    <p v-if="show">hello</p>  </transition></div>
new Vue({  el:'#app1',  data:{    show:true  }})
.fade-enter-active, .fade-leave-active{  transition: opacity 2s;}.fade-enter, .fade-leave-to{  opacity: 0;}

運行結果如下:

點擊toggle按鈕會看見文字淡入淡出的效果。

當插入或刪除包含在 transition 組件中的元素時,Vue 將會做以下處理:

  1. 自動嗅探目標元素是否應用了 CSS 過渡或動畫,如果是,在恰當的時機添加/刪除 CSS 類名。
  2. 如果過渡組件提供了 JavaScript 鉤子函數,這些鉤子函數將在恰當的時機被調用。
  3. 如果沒有找到 JavaScript 鉤子并且也沒有檢測到 CSS 過渡/動畫,DOM 操作(插入/刪除)在下一幀中立即執行。(注意:此指瀏覽器逐幀動畫機制,和Vue的 nextTick 概念不同)

過度的CSS類名

  1. v-enter: 定義進入過渡的開始狀態。在元素被插入時生效,在下一個幀移除。
  2. v-enter-active: 定義過渡的狀態。在元素整個過渡過程中作用,在元素被插入時生效,在 transition/animation 完成之后移除。 這個類可以被用來定義過渡的過程時間,延遲和曲線函數。
  3. v-enter-to: 2.1.8版及以上 定義進入過渡的結束狀態。在元素被插入一幀后生效(于此同時 v-enter 被刪除),在 transition/animation 完成之后移除。
  4. v-leave: 定義離開過渡的開始狀態。在離開過渡被觸發時生效,在下一個幀移除。
  5. v-leave-active: 定義過渡的狀態。在元素整個過渡過程中作用,在離開過渡被觸發后立即生效,在 transition/animation 完成之后移除。 這個類可以被用來定義過渡的過程時間,延遲和曲線函數。
  6. v-leave-to: 2.1.8版及以上 定義離開過渡的結束狀態。在離開過渡被觸發一幀后生效(于此同時 v-leave 被刪除),在 transition/animation 完成之后移除。

對于這些在 enter/leave 過渡中切換的類名,v- 是這些類名的前綴。使用 <transition name="my-transition" 可以重置前綴,比如 v-enter 替換為 my-transition-enter。

CSS過度

常用的過渡都是使用 CSS 過渡。以下為示例代碼。

<div id="app2">  <button @click="show = !show">toggle css</button>  <transition name="slide-fade">    <p v-if="show">CSS 過渡</p>  </transition></div>
new Vue({  el:'#app2',  data:{    show:true  }})
    .slide-fade-enter-active{      transition: all .3s ease;    }    .slide-fade-leave-active{      transition: all .8s cubic-bezier(0.68, -0.55, 0.27, 1.55);    }    .slide-fade-enter, .slide-fade-leave-to{      transform: translateX(100px);      opacity: 0;    }

運行結果

點擊按鈕就會看到動畫效果。

CSS動畫

CSS 動畫用法同 CSS 過渡,區別是在動畫中 v-enter 類名在節點插入 DOM 后不會立即刪除,而是在 animationend 事件觸發時刪除。

示例: (省略了兼容性前綴)

<div id="app3">  <button @click="show = !show">toggle css</button>  <transition name="bounce">    <p v-if="show">css 動畫</p>  </transition></div>
new Vue({  el:'#app3',  data:{    show:true  }})
    .bounce-enter-active{      animation: bounce-in .5s;    }    .bounce-leave-active{      animation: bounce-in .5s reverse;    }    @keyframes bounce-in {      0%{        transform: scale(0);      }      50%{        transform: scale(1.5);      }      100%{        transform: scale(1);      }    }

運行結果:

自定義過渡類名

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

  • enter-class
  • enter-active-class
  • enter-to-class (>= 2.1.8 only)
  • leave-class
  • leave-active-class
  • leave-to-class (>= 2.1.8 only)

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

<link  rel="external nofollow" rel="stylesheet" type="text/css"><div id="app4">  <button @click="show = !show">toggle coustom class</button>  <transition name="bounce"  enter-active-class="animated tada"  leave-active-class="animated bounceOutRight">    <p v-if="show">自定義過渡類名</p>  </transition></div>
new Vue({  el:'#app4',  data:{    show:true  }})

運行結果:

animate.css的學習可以參考官網:https://daneden.github.io/animate.css/

javascript鉤子

可以在屬性中聲明 JavaScript 鉤子

<transition v-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>
methods: { // -------- // 進入中 // -------- beforeEnter: function (el) {  // ... }, // 此回調函數是可選項的設置 // 與 CSS 結合時使用 enter: function (el, done) {  // ...  done() }, afterEnter: function (el) {  // ... }, enterCancelled: function (el) {  // ... }, // -------- // 離開時 // -------- beforeLeave: function (el) {  // ... }, // 此回調函數是可選項的設置 // 與 CSS 結合時使用 leave: function (el, done) {  // ...  done() }, afterLeave: function (el) {  // ... }, // leaveCancelled 只用于 v-show 中 leaveCancelled: function (el) {  // ... }}

這些鉤子函數可以結合 CSS transitions/animations 使用,也可以單獨使用。

當只用 JavaScript 過渡的時候, 在 enter和leave 中,回調函數 done 是必須的 。 否則,它們會被同步調用,過渡會立即完成。

推薦對于僅使用 JavaScript 過渡的元素添加 v-bind:css="false",Vue 會跳過 CSS 的檢測。這也可以避免過渡過程中 CSS 的影響。

一個使用 Velocity.js 的簡單例子:

<div id="app5">  <button @click="show = !show">toggle hook</button>  <transition @before-enter="beforeEnter"  @enter="enter"  @leave="leave"  :css="false">    <p v-if="show">javascript 鉤子使用</p>  </transition></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script><script >new Vue({  el:'#app5',  data:{    show:false  },  methods:{    beforeEnter:function (el) {      el.style.opacity = 0      el.style.transformOrigin = 'left'    },    enter:function (el, done) {      Velocity(el, {opacity:1, fontSize:'1.4em'}, {duration:300})      Velocity(el, {fontSize:'1em'}, {complete:done})    },    leave:function (el, done) {      Velocity(el, {translateX:'15px', rotateZ:'50deg'}, {duration:600})      Velocity(el, {rotateZ:'100deg'}, {loop:2})      Velocity(el,{        rotateZ:'45deg',        translateY:'30px',        translateX:'30px',        opacity:0      }, {complete:done})    }  }})</script>

運行結果:

初始渲染的過度

可以通過appear 特性設置節點的在初始渲染的過渡

這里默認和進入和離開過渡一樣,同樣也可以自定義 CSS 類名。

<transition appear appear-class="custom-appear-class" appear-to-class="custom-appear-to-class" appear-active-class="custom-appear-active-class"> <!-- ... --></transition>

自定義 JavaScript 鉤子:

<transition appear v-on:before-appear="customBeforeAppearHook" v-on:appear="customAppearHook" v-on:after-appear="customAfterAppearHook" v-on:appear-cancelled="customAppearCancelledHook"> <!-- ... --></transition>

示例代碼:

<!--初始渲染--><div id="app6">  <transition appear        appear-active-class="animated tada">    <p>初始畫面</p>  </transition></div>
new Vue({  el:'#app6',  data:{    show:true  }})

運行結果:

在界面加載該元素時,會有個過渡效果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美人与性动交a欧美精品| 性色av一区二区咪爱| 久久久久久国产| 欧日韩不卡在线视频| 欧美成在线观看| 欧美另类老女人| 伊人久久五月天| 欧美情侣性视频| 亚洲的天堂在线中文字幕| 欧美成人性生活| 中文字幕视频一区二区在线有码| 欧美一性一乱一交一视频| 色噜噜久久综合伊人一本| xxx成人少妇69| 亚洲成年人在线播放| 久久中国妇女中文字幕| 久久亚洲精品毛片| 久久久999国产精品| 亚洲欧美资源在线| 亚洲第一页自拍| 国产精品美女久久| 一区二区三区四区视频| 大荫蒂欧美视频另类xxxx| 久久久久久中文字幕| 午夜美女久久久久爽久久| 日韩精品在线观看网站| 第一福利永久视频精品| 久久精品国产欧美激情| 亚洲男人天堂2024| 日韩av片免费在线观看| 91精品国产电影| 久久6精品影院| 国产专区欧美专区| 久久夜色精品国产亚洲aⅴ| 国产精品福利久久久| 欧美日韩久久久久| 国产成人一区二区三区小说| 久久99久久99精品中文字幕| 91香蕉亚洲精品| 国产91色在线免费| 欧美成人黄色小视频| 国产一区二区三区视频| 久久中文字幕在线视频| 欧美精品成人91久久久久久久| 亚洲高清免费观看高清完整版| 亚洲国产欧美在线成人app| 成人欧美一区二区三区在线| 一区二区成人精品| 91亚洲午夜在线| 久久国产精品久久久| 2018中文字幕一区二区三区| 国产精品中文字幕在线| 亚洲欧洲xxxx| 欧美裸体xxxxx| 国产成人jvid在线播放| 欧美日韩在线另类| 日韩中文字幕在线播放| 久久国产精品久久久久久| 欧美激情亚洲国产| 国产成人精品免高潮费视频| 久久精品久久精品亚洲人| 国产成人久久精品| 日韩电影免费在线观看| 亚洲精品女av网站| 久久久av一区| 欧美激情一区二区三区高清视频| 成人在线视频网站| 亚洲精品久久久久久下一站| 中文字幕亚洲在线| 国产成人在线播放| 成人h视频在线观看播放| 青青在线视频一区二区三区| 国产噜噜噜噜久久久久久久久| 国产精品观看在线亚洲人成网| 成人福利网站在线观看11| 欧美日韩国产专区| 伊人久久免费视频| 亚洲国产精彩中文乱码av在线播放| 九九久久精品一区| 久久免费高清视频| 影音先锋日韩有码| 欧美成aaa人片免费看| 久久精品夜夜夜夜夜久久| 亚洲毛片在线看| 成人做爽爽免费视频| 日韩精品有码在线观看| 欧美老少配视频| 日韩激情av在线播放| 亚洲欧美日韩另类| 亚洲人午夜色婷婷| 久久久亚洲国产天美传媒修理工| 成人在线一区二区| 在线视频欧美性高潮| 欧美视频在线看| 亚洲亚裔videos黑人hd| 欧美老少做受xxxx高潮| 欧美大胆在线视频| 国产视频在线一区二区| 久久精品久久久久| 91av在线免费观看视频| 97久久精品人搡人人玩| 欧美中文字幕在线观看| 亚洲国产第一页| 国产免费一区二区三区在线能观看| 久久精品国产91精品亚洲| 亚洲电影天堂av| 久久久久久免费精品| 国产精品自拍小视频| 91在线观看免费高清完整版在线观看| 伊人伊人伊人久久| 欧美视频在线视频| 久久天天躁狠狠躁夜夜躁| 亚洲人成伊人成综合网久久久| 中文字幕日韩在线播放| 久久精品青青大伊人av| 亚洲欧洲高清在线| 在线亚洲欧美视频| 国产91ⅴ在线精品免费观看| 国产精品免费久久久久久| 亚洲白虎美女被爆操| 久久人人爽人人爽人人片亚洲| 亚洲在线免费观看| 欧美日韩高清在线观看| 久久影视电视剧免费网站| 日韩欧美有码在线| 欧美激情视频网| 欧美肥婆姓交大片| 久久久久久久影院| 日韩精品一区二区视频| 亚洲精品中文字幕女同| 夜夜嗨av色综合久久久综合网| 国产精品网红福利| 国产91精品青草社区| 高清亚洲成在人网站天堂| 亚洲欧美日韩在线一区| 欧美黑人xxxx| 久久免费视频在线| 韩剧1988在线观看免费完整版| 精品中文字幕视频| 欧美伦理91i| 精品久久久国产精品999| 国产成人亚洲精品| 成人久久精品视频| 久久久久久久久电影| 日本久久久久久久久| 亚洲国产欧美一区二区丝袜黑人| 一区二区三区四区精品| 欧美国产日韩一区二区在线观看| 中文字幕免费精品一区| 97精品视频在线观看| 成人天堂噜噜噜| 国产精品美腿一区在线看| 欧美亚洲视频在线看网址| 奇米四色中文综合久久| 国产精品免费视频xxxx| 日韩av免费在线| 色狠狠久久aa北条麻妃| 欧洲精品毛片网站| 欧美色道久久88综合亚洲精品| 日韩免费在线电影| 91精品国产自产在线观看永久| 日韩欧美国产激情| 久久天天躁狠狠躁夜夜av| 色偷偷av亚洲男人的天堂|