亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-06-03 16:56:02 來源:億速云 閱讀:315 作者:Leah 欄目:web開發

vue 組件中使用 transition 和 transition-group實現過渡動畫?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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
  重復運動事件: webkitAnimationIteration
css3的過渡屬性transition: 一個事件
  過渡結束: webkitTransitionEnd

看完上述內容,你們掌握vue 組件中使用 transition 和 transition-group實現過渡動畫的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

囊谦县| 寻乌县| 洛扎县| 宜昌市| 合作市| 高密市| 萨迦县| 东兴市| 绵阳市| 玉溪市| 汝州市| 响水县| 绥江县| 阜新| 锦州市| 措勤县| 二手房| 五莲县| 钟祥市| 湘阴县| 高陵县| 志丹县| 延长县| 乌鲁木齐市| 临澧县| 建湖县| 祁门县| 五常市| 军事| 黄陵县| 阿勒泰市| 富平县| 耒阳市| 大安市| 平泉县| 石景山区| 阿瓦提县| 弥渡县| 奉新县| 澳门| 二连浩特市|