麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

vue 組件中使用 transition 和 transition-group實現過渡動畫

2019-11-19 11:12:46
字體:
來源:轉載
供稿:網友

前言

記一次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 為組件中的屬性

出現的過程: name-enter(初始態) => name-enter-active(中間態) => name-enter-to(終止態)
消失的過程: 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 中寫上終止態屬性

    其實終止態的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 鉤子實現過渡動畫: 通過操作類名; 就是 name 版的 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"    >     <app-horizontal :itemData="item"></app-horizontal>   </li>  </transition-group> </ul>  //  methods: {  // 事先定義上述類名  // 在beforeEnter enter afterEnter 鉤子中手動操作上述類名    // 初始態  beforeEnter(dom) {   dom.classList.add('list-enter', 'list-enter-active');  },  // 中間態  enter(dom,done) {   // 通過 setTimeout + dataset 實現過渡   let delay = dom.dataset.delay;   setTimeout(function () {    dom.classList.remove('list-enter');    dom.classList.add('list-enter-to');    //監聽 transitionend 事件    var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";    dom.addEventListener(transitionend, function onEnd() {     // 移除事件     dom.removeEventListener(transitionend, onEnd);     //調用done(),表示動畫已完成     done()    });   }, delay)  },  // 終止態  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樣式;根據需求添加  methods: {   // 初始態  beforeEnter(dom) {   let { x = 0, y = 0, opacity = 0 } = dom.dataset;   dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: translateX(${x}) translateY(${y});`;  },  // 中間態  enter(dom,done) {   let delay = dom.dataset.delay;   setTimeout(function () {    dom.style.cssText = `transition: .3s;opacity: 1;transform: translateX(0) translateY(0);`;    //監聽 transitionend 事件    var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";    dom.addEventListener(transitionend, function onEnd() {       dom.removeEventListener(transitionend, onEnd);       done();     });   }, delay)  },  // 終止態  afterEnter(dom) {   dom.style.cssText = "";  } }

這里記錄一下監聽css3的animation動畫和transition事件:

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费一级欧美大片视频 | 88xx成人永久免费观看 | 国产精品一区在线看 | 免费a级片在线观看 | 天天看成人免费毛片视频 | 久久伊人国产精品 | 国产九色91| 5xsq在线视频| 日韩欧美中文字幕视频 | 泰剧19禁啪啪无遮挡大尺度 | 国内精品久久久久久2021浪潮 | 免费在线观看毛片视频 | 高清国产免费 | av懂色 | 亚洲成人国产 | 黄色男女视频 | 美女视频黄a视频免费全过程 | 日韩不卡一区二区 | 精品一区视频 | 在线看91 | 欧美一级爱爱 | av在线试看 | 久久综合九色综合久久久精品综合 | 色97在线| 精品国产一区二区三区在线观看 | 圆产精品久久久久久久久久久 | 激情小视频在线观看 | 免费看成年人网站 | 免费国产羞羞网站视频 | 精品在线视频播放 | 日本在线观看视频网站 | 成年人免费视频大全 | 狠狠操视频网站 | 亚洲第一激情网 | 欧美成在线视频 | 精品国产一区二区亚洲人成毛片 | 视频一区二区三区在线播放 | 久久久一区二区精品 | 草莓视频在线导航 | 羞羞视频免费网站含羞草 | 久久国语对白 |