最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 組件中使用 transition 和 transition-group實(shí)現(xiàn)過渡動(dòng)畫

 更新時(shí)間:2019年07月09日 09:03:52   作者:appleguardu  
本文給大家分享一下vue 組件中使用 transition 和 transition-group 設(shè)置過渡動(dòng)畫,總結(jié)來說可分為分為 name 版, js 鉤子操作類名版, js 鉤子操作行內(nèi)樣式版,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

前言

記一次vue 組件中使用 transition 和 transition-group 設(shè)置過渡動(dòng)畫,總結(jié)來說可分為分為 name 版, js 鉤子操作類名版, js 鉤子操作行內(nèi)樣式版...

template模板結(jié)構(gòu)

// 單個(gè)元素
  <transition name="自定義名字">
   <p v-if="show">hello</p>
  </transition>
 // 列表元素: 注意group的直接子元素是v-for渲染出來的
  <ul class="list">
   <transition-group name="list">
    <li v-for="(item, index) in gameList" :key="item.id">
     <app-horizontal :itemData="item"></app-horizontal>
    </li>
   </transition-group>
  </ul>

name 版,name 為組件中的屬性

出現(xiàn)的過程: name-enter(初始態(tài)) => name-enter-active(中間態(tài)) => name-enter-to(終止態(tài))
消失的過程: name-leave => name-leave-active => name-leave-to
以進(jìn)場過渡動(dòng)畫為例子

我們可以分別設(shè)置 enter 階段 和 enter-to 階段的動(dòng)畫

  1.設(shè)置進(jìn)入時(shí)需要過渡的屬性

 .name-enter
 {
  opacity: 0;
  transform: translateY(30px)
 }

  2.然后在 name-enter-active中設(shè)置過渡時(shí)間

 .name-enter-active {
  transition: all .3s;
 }

  3.最后在 name-enter-to 中寫上終止態(tài)屬性

    其實(shí)終止態(tài)的opacity: 1;transform: none; 是默認(rèn)的,可以不用寫

 .name-enter-to {
  opacity: 1;
  transform: translateY(0);
 }

  如果要給列表中的元素設(shè)置交錯(cuò)的效果, 元素不多的話可以添加 delay 屬性

 .name-enter-active:nth-child(3n+1) {
  transition-delay: 0s;
 }
 .name-enter-active:nth-child(3n+2) {
  transition-delay: .1s;
 }
 .name-enter-active:nth-child(3n+3) {
  transition-delay: .2s;
 }

  離場動(dòng)畫同理...

js 鉤子實(shí)現(xiàn)過渡動(dòng)畫: 通過操作類名; 就是 name 版的 js 實(shí)現(xiàn)

// 例如實(shí)現(xiàn)上述列表依次顯示
 <ul class="list">
  <transition-group
   v-bind:css="false"
   v-on:before-enter="beforeEnter"
   v-on:enter="enter"
   v-on:after-enter="afterEnter">
   <li v-for="(item, index) in gameList" 
    :key="item.id" 
    :data-delay="index*100" 
   >
     <app-horizontal :itemData="item"></app-horizontal>
   </li>
  </transition-group>
 </ul> 
 // 
 methods: {
  // 事先定義上述類名
  // 在beforeEnter enter afterEnter 鉤子中手動(dòng)操作上述類名
  
  // 初始態(tài)
  beforeEnter(dom) {
   dom.classList.add('list-enter', 'list-enter-active');
  },
  // 中間態(tài)
  enter(dom,done) {
   // 通過 setTimeout + dataset 實(shí)現(xiàn)過渡
   let delay = dom.dataset.delay;
   setTimeout(function () {
    dom.classList.remove('list-enter');
    dom.classList.add('list-enter-to');
    //監(jiān)聽 transitionend 事件
    var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";
    dom.addEventListener(transitionend, function onEnd() {
     // 移除事件
     dom.removeEventListener(transitionend, onEnd);
     //調(diào)用done(),表示動(dòng)畫已完成
     done()
    });
   }, delay)
  },
  // 終止態(tài)
  afterEnter(dom) {
   dom.classList.remove('list-enter-to', 'list-enter-active');
  }
 }

js 鉤子過渡動(dòng)畫: 通過操作行內(nèi)屬性, 自定義動(dòng)畫

<ul class="list">
  <transition-group
   v-bind:css="false"
   v-on:before-enter="beforeEnter"
   v-on:enter="enter"
   v-on:after-enter="afterEnter">
   <li v-for="(item, index) in gameList" 
    :key="item.id" 
    :data-delay="index*100"
    data-y = "100%" 
   >
     <app-horizontal :itemData="item"></app-horizontal>
   </li>
  </transition-group>
 </ul> 
 // 對(duì)應(yīng)的操作方法; 添加自定義的 dataset,給dom設(shè)置css樣式;根據(jù)需求添加
  methods: {
   // 初始態(tài)
  beforeEnter(dom) {
   let { x = 0, y = 0, opacity = 0 } = dom.dataset;
   dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: translateX(${x}) translateY(${y});`;
  },
  // 中間態(tài)
  enter(dom,done) {
   let delay = dom.dataset.delay;
   setTimeout(function () {
    dom.style.cssText = `transition: .3s;opacity: 1;transform: translateX(0) translateY(0);`;
    //監(jiān)聽 transitionend 事件
    var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";
    dom.addEventListener(transitionend, function onEnd() {
       dom.removeEventListener(transitionend, onEnd);
       done(); 
    });
   }, delay)
  },
  // 終止態(tài)
  afterEnter(dom) {
   dom.style.cssText = "";
  }
 }

這里記錄一下監(jiān)聽css3的animation動(dòng)畫和transition事件:

webkit-animation動(dòng)畫有三個(gè)事件:
  開始事件: webkitAnimationStart
  結(jié)束事件: webkitAnimationEnd
  重復(fù)運(yùn)動(dòng)事件: webkitAnimationIteration
css3的過渡屬性transition: 一個(gè)事件
  過渡結(jié)束: webkitTransitionEnd

總結(jié)

以上所述是小編給大家介紹的vue 組件中使用 transition 和 transition-group實(shí)現(xiàn)過渡動(dòng)畫 ,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 詳解vue的數(shù)據(jù)劫持以及操作數(shù)組的坑

    詳解vue的數(shù)據(jù)劫持以及操作數(shù)組的坑

    這篇文章主要介紹了vue的數(shù)據(jù)劫持以及操作數(shù)組的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • VUE中對(duì)object.object和object[object]的使用解讀

    VUE中對(duì)object.object和object[object]的使用解讀

    這篇文章主要介紹了VUE中對(duì)object.object和object[object]的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue+Element使用富文本編輯器的示例代碼

    Vue+Element使用富文本編輯器的示例代碼

    本篇文章主要介紹了Vue+Element使用富文本編輯器的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • Vue3.2+Ts組件之間通信的實(shí)現(xiàn)

    Vue3.2+Ts組件之間通信的實(shí)現(xiàn)

    本文主要介紹了Vue3.2+Ts組件之間通信的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Vue3之toRefs和toRef在reactive中的一些應(yīng)用方式

    Vue3之toRefs和toRef在reactive中的一些應(yīng)用方式

    這篇文章主要介紹了Vue3之toRefs和toRef在reactive中的一些應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue實(shí)現(xiàn)鎖屏功能的示例代碼

    Vue實(shí)現(xiàn)鎖屏功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue實(shí)現(xiàn)簡單的鎖屏功能,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以了解一下
    2023-06-06
  • vue.js提交按鈕時(shí)進(jìn)行簡單的if判斷表達(dá)式詳解

    vue.js提交按鈕時(shí)進(jìn)行簡單的if判斷表達(dá)式詳解

    這篇文章主要給大家介紹了關(guān)于vue.js提交按鈕時(shí)如何進(jìn)行簡單的if判斷表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Vue頂部tags瀏覽歷史的實(shí)現(xiàn)

    Vue頂部tags瀏覽歷史的實(shí)現(xiàn)

    在管理系統(tǒng)中,常常需要在頂部tags顯示瀏覽歷史。本文將教大家如何通過Vue實(shí)現(xiàn)這一功能,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2021-12-12
  • LRU算法在Vue內(nèi)置組件keep-alive中的使用

    LRU算法在Vue內(nèi)置組件keep-alive中的使用

    LRU算法全稱為least recently use 最近最少使用,核心思路是最近被訪問的以后被訪問的概率會(huì)變高,那么可以把之前沒被訪問的進(jìn)行刪除,維持一個(gè)穩(wěn)定的最大容量值,從而不會(huì)導(dǎo)致內(nèi)存溢出。
    2021-05-05
  • 淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    本篇文章主要介紹了淺談vue+webpack項(xiàng)目調(diào)試方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09

最新評(píng)論

东安县| 阳山县| 巩义市| 云浮市| 玉林市| 拉萨市| 平舆县| 阿鲁科尔沁旗| 龙岩市| 阿鲁科尔沁旗| 乳源| 根河市| 雅安市| 涿州市| 当阳市| 辽中县| 来凤县| 泗阳县| 安图县| 五莲县| 唐山市| 黑河市| 浑源县| 柏乡县| 丹凤县| 宝山区| 伊川县| 高尔夫| 新干县| 稷山县| 名山县| 虞城县| 会同县| 平度市| 突泉县| 洛扎县| 江达县| 蒲城县| 大关县| 锦屏县| 抚顺县|