欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

記一次vue 組件中使用 transition 和 transition-group 設置過渡動畫,總結來說可分為分為 name 版, js 鉤子操作類名版, js 鉤子操作行內樣式版...

template模板結構

// 單個元素
  <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
以進場過渡動畫為例子

我們可以分別設置 enter 階段 和 enter-to 階段的動畫

  1.設置進入時需要過渡的屬性

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

  2.然后在 name-enter-active中設置過渡時間

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

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

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

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

  如果要給列表中的元素設置交錯的效果, 元素不多的話可以添加 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;
 }

  離場動畫同理...

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

// 例如實現(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 鉤子中手動操作上述類名
  
  // 初始態(tài)
  beforeEnter(dom) {
   dom.classList.add('list-enter', 'list-enter-active');
  },
  // 中間態(tài)
  enter(dom,done) {
   // 通過 setTimeout + dataset 實現(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);
     //調用done(),表示動畫已完成
     done()
    });
   }, delay)
  },
  // 終止態(tài)
  afterEnter(dom) {
   dom.classList.remove('list-enter-to', 'list-enter-active');
  }
 }

js 鉤子過渡動畫: 通過操作行內屬性, 自定義動畫

<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> 
 // 對應的操作方法; 添加自定義的 dataset,給dom設置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動畫和transition事件:

webkit-animation動畫有三個事件:
  開始事件: webkitAnimationStart
  結束事件: webkitAnimationEnd
  重復運動事件: webkitAnimationIteration
css3的過渡屬性transition: 一個事件
  過渡結束: webkitTransitionEnd

總結

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

相關文章

  • Vue-Access-Control 前端用戶權限控制解決方案

    Vue-Access-Control 前端用戶權限控制解決方案

    Vue-Access-Control是一套基于Vue/Vue-Router/axios 實現(xiàn)的前端用戶權限控制解決方案。這篇文章主要介紹了Vue-Access-Control:前端用戶權限控制解決方案,需要的朋友可以參考下
    2017-12-12
  • vue長按事件和點擊事件沖突的解決

    vue長按事件和點擊事件沖突的解決

    這篇文章主要介紹了vue長按事件和點擊事件沖突的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue與bootstrap實現(xiàn)時間選擇器的示例代碼

    vue與bootstrap實現(xiàn)時間選擇器的示例代碼

    本篇文章主要介紹了vue與bootstrap實現(xiàn)時間選擇器的示例代碼,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • vue父組件值變化但子組件不刷新的三種解決方案

    vue父組件值變化但子組件不刷新的三種解決方案

    父組件傳遞給子組件的數(shù)據(jù),如果是一個復雜對象(例如一個數(shù)組或對象),那么子組件只會監(jiān)聽對象的引用而不是對象的內容,這意味著當對象的內容發(fā)生變化時,子組件不會更新,本文給大家介紹了vue子組件不刷新的三種解決方案,需要的朋友可以參考下
    2024-03-03
  • 在vue中利用全局路由鉤子給url統(tǒng)一添加公共參數(shù)的例子

    在vue中利用全局路由鉤子給url統(tǒng)一添加公共參數(shù)的例子

    今天小編就為大家分享一篇在vue中利用全局路由鉤子給url統(tǒng)一添加公共參數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue實現(xiàn)登錄注冊模板的示例代碼

    vue實現(xiàn)登錄注冊模板的示例代碼

    這篇文章主要介紹了vue實現(xiàn)登錄注冊模板的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Vue中搭配Bootstrap實現(xiàn)Vue的列表增刪功能

    Vue中搭配Bootstrap實現(xiàn)Vue的列表增刪功能

    日常開發(fā)中,我們可以用?“拿來主義”?借助Bootstarp現(xiàn)成的一些樣式,快速生成我們想要的頁面布局,避免書寫大量的HTML和CSS代碼,省下了許多不必要的時間,可以直接搭配vue使用
    2022-11-11
  • Vue強制組件重新渲染的方法討論

    Vue強制組件重新渲染的方法討論

    這篇文章給大家詳細介紹了Vue強制組件重新渲染的正確方法,非常的實用,有需要的小伙伴可以參考下
    2020-02-02
  • vue、react等單頁面項目應該這樣子部署到服務器

    vue、react等單頁面項目應該這樣子部署到服務器

    這篇文章主要介紹了vue、react等單頁面項目應該這樣子部署到服務器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • vue3刪除過濾器的原因

    vue3刪除過濾器的原因

    去年,vue3出來了。增加了很多新功能,但是也刪掉了一些功能。比如刪掉了vue2中的過濾器filter功能。與此同時,官方建議:用方法調用或計算屬性替換過濾器。本文將分析vue3刪除過濾器的原因及如何用其他方法實現(xiàn)過濾器的功能
    2021-05-05

最新評論