<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        vue 巧用過渡效果(小結)

        來源:懂視網 責編:小采 時間:2020-11-27 22:07:12
        文檔

        vue 巧用過渡效果(小結)

        vue 巧用過渡效果(小結):vue提供的了transition組件來實現組件的過渡和路由的過渡,合理使用這個組建可以讓我們的頁面更加的靈活,提高用戶體驗。 概念 在進入/離開的過渡中, 會有6個class的切換, 抄一張官方的圖 v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素
        推薦度:
        導讀vue 巧用過渡效果(小結):vue提供的了transition組件來實現組件的過渡和路由的過渡,合理使用這個組建可以讓我們的頁面更加的靈活,提高用戶體驗。 概念 在進入/離開的過渡中, 會有6個class的切換, 抄一張官方的圖 v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素

        vue提供的了transition組件來實現組件的過渡和路由的過渡,合理使用這個組建可以讓我們的頁面更加的靈活,提高用戶體驗。

        概念

        在進入/離開的過渡中, 會有6個class的切換, 抄一張官方的圖

      1. v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素被插入之后的下一幀移除。
      2. v-enter-active:定義進入過渡生效時的狀態。在整個進入過渡的階段中應用,在元素被插入之前生效,在過渡/動畫完成之后移除。這個類可以被用來定義進入過渡的過程時間,延遲和曲線函數。
      3. v-enter-to: 2.1.8版及以上 定義進入過渡的結束狀態。在元素被插入之后下一幀生效 (與此同時 v-enter 被移除),在過渡/動畫完成之后移除。
      4. v-leave: 定義離開過渡的開始狀態。在離開過渡被觸發時立刻生效,下一幀被移除。
      5. v-leave-active:定義離開過渡生效時的狀態。在整個離開過渡的階段中應用,在離開過渡被觸發時立刻生效,在過渡/動畫完成之后移除。這個類可以被用來定義離開過渡的過程時間,延遲和曲線函數。
      6. v-leave-to: 2.1.8版及以上 定義離開過渡的結束狀態。在離開過渡被觸發之后下一幀生效 (與此同時 v-leave 被刪除),在過渡/動畫完成之后移除。
      7. 看起來還是有有點亂,先來捋一下。

        enter 定義開始的狀態, active定義過程, enter定義結束, 但是在實際進行的時候是有交叉的。 通過斷點可以發現,

      8. 添加v-enter
      9. 添加v-enter-active,
      10. 卸載v-enter
      11. 添加v-ernter-to
      12. 卸載v-enter-to和v-enter-active
      13. // transition: all 2s; 
         .move-enter {
         margin-left: 0;
         }
         .move-enter-active {
         margin-left: 100px;
         }
         .move-enter-to {
         margin-left: 200px;
         }

        例如在上面這種情況下, 過渡動畫會怎么進行呢?

        這里要注意兩點。

        1. enter-active覆蓋掉了enter的起點位置
        2. 一共經過了兩次過渡, enter-to是在active結束之后開始的, 所以第四秒, 才回到dom元素本身的位置。

        所以官方文檔之, 也是使用v-enter定義起點位置, 在enter-active中控制效果。

        利用class實現過渡效果

        在這6個class之上, 利用transition或者動畫, 都可以實現我們需要的效果。 舉個栗子, 這里我們直接將所有的路由改變都定義一個過渡效果,

        appear屬性表示頁面初次加載的時候也適用于動畫

         <transition appear name="move">
         <router-view></router-view>
         </transition>
        @keyframes animationIn {
         0% {
         transform: translate(-100%, 0);
         }
         100% {
         transform: translate(0, 0);
         }
        }
        @keyframes animationOut {
         0% {
         transform: translate(0, 0);
         }
         100% {
         transform: translate(100%, 0);
         }
        }
        
        .move-enter {
         transform: translate(-100%, 0);
         position: absolute!important;
         z-index: 999;
         top: 0;
         left: 0;
         width: 100%;
        }
        .move-enter-active {
         animation: animationIn 0.2s;
         position: absolute!important; // 進入的組件要覆蓋掉移除的組件,參考 //https://cn.vuejs.org/v2/guide/transitions.html#%E8%BF%87%E6%B8%A1%E6%A8%A1%E5%BC%8F
         z-index: 999;
         top: 0;
         left: 0;
         width: 100%;
        }
        .move-leave {
         transform: translate(0, 0);
        }
        .move-leave-active {
         animation: animationOut 0.2s;
        }

        效果

        JavaScript 鉤子

        這些鉤子函數可以結合 CSS transitions/animations 使用

        <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>

        在這些鉤子中, 可以使用其他第三方庫,回調中的el將是真實的dom元素 舉個栗子, 這里使用了官方推薦的Velocity.js作為動畫庫

         <div class="main">
         <transition name="showRect" appear
         @before-enter="handleBeforeEnter"
         @enter="handleEnter"
         @after-enter="handleAfterEnter"
         @before-leave="handleBeforeLeave"
         @leave="handleLeave"
         @after-leave="handleAfterLeave"
         :css="false">
         <div class="box" v-if="show"></div>
         </transition>
         </div>
         <button @click="start">切換</button>
         methods: {
         start() {
         this.show = !this.show
         },
         handleBeforeEnter: function (el) {
         el.style.opacity = 0;
         console.log('方塊顯示動畫即將執行');
         },
         handleEnter: function (el, done) {
         Velocity(el, 'stop');
         Velocity(el, {
         backgroundColor: '#0085eb',
         opacity: 1,
         translateX: 260,
         rotateZ: ['360deg', 0]
         }, {
         duration: 1000,
         easing: [ 0.4, 0.01, 0.165, 0.99 ],
         complete: done
         });
         console.log('方塊顯示動畫執行中...');
         },
         handleAfterEnter: function (el) {
         console.log('方塊顯示動畫結束');
         },
         handleBeforeLeave: function (el) {
         console.log('方塊隱藏動畫即將執行');
         },
         handleLeave: function (el, done) {
         Velocity(el, 'stop');
         Velocity(el, {
         backgroundColor: '#4dd0e1',
         opacity: 0,
         translateX: 0,
         rotateZ: [0, '360deg']
         }, {
         duration: 1000,
         easing: [ 0.4, 0.01, 0.165, 0.99 ],
         complete: done
         });
         console.log('方塊隱藏動畫執行中...');
         },
         handleAfterLeave: function (el) {
         console.log('方塊隱藏動畫結束');
         }
         }

        列表過渡

        vue還提供了transition-group組件, 作為列表過渡的容器

        不同于 ,它會以一個真實元素呈現:默認為一個 。你也可以通過 tag 特性更換為其他元素

        transition-group 擁特別的v-move屬性,它會在元素的改變定位的過程中應用, 效果可參見官網。

        其他的就不抄官網了

        列表過渡中, 可以結合js鉤子, 實現一些特殊的效果

        舉個栗子

        <template>
         <div>
         <div class="btn" @click="addItem">添加</div>
         <div class="btn" @click="sort">排序</div>
         <div class="box">
         <div class="item-bar">
         <transition-group name="fade" tag="p" appear
         v-on:before-enter="beforeEnter"
         v-on:after-enter="afterEnter">
         // 這里的data-index 是一個識別標識, 便于在js鉤子中獲得當前元素的序號
         <div class="item" v-for="(i, index) in list" :key="i" :data-index="index">{{i}}</div>
         </transition-group>
         </div>
         </div>
         </div>
        </template>
        <script lang="ts">
         import Vue from "vue";
         export default Vue.extend({
         name: "home",
         data() {
         return {
         show: true,
         list: [5,4,3,2,1],
         nextNum: 6
         };
         },
         methods: {
         showDom() {
         this.show = !this.show
         },
         beforeEnter: function (el: any) {
         el.style.opacity = 0 // 每個元素插入之前, 透明度為0
         let index = el.dataset.index 每次可能插入多個元素,
         // 頁面加載時先展示5個
         if (index < 5) {
         //設置動畫延遲, 實現按續插入的效果
         el.style.animationDelay = el.dataset.index * 0.3 + 's'
         }
         },
         afterEnter: function (el) {
         el.style.opacity = 1
         console.log('afterEnter')
         },
         addItem() {
         this.list.push(this.nextNum++)
         },
         sort() {
         this.list = this.list.sort((a, b) => a -b)
         }
         }
         });
        </script>
         @keyframes animat {
         0% {
         margin-left: 300px;
         opacity: 0;
         }
         100% {
         margin-left: 0;
         opacity: 1;
         }
         }
         .fade-enter {
         opacity: 0;
         margin-left: 300px;
         }
         .fade-enter-active {
         opacity: 0;
         animation: animat 1s;
         }
         .fade-enter-to {
         opacity: 1;
         margin-left: 0;
         }
        
         .fade-move {
         transition: all 0.3s;
         }
         .fade-leave {
         left: 10px;
         }
         .fade-leave-active {
         transition: all 2s ease-out;
         }
         .fade-leave-to {
         left: -100%;
         }

        效果

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue 巧用過渡效果(小結)

        vue 巧用過渡效果(小結):vue提供的了transition組件來實現組件的過渡和路由的過渡,合理使用這個組建可以讓我們的頁面更加的靈活,提高用戶體驗。 概念 在進入/離開的過渡中, 會有6個class的切換, 抄一張官方的圖 v-enter:定義進入過渡的開始狀態。在元素被插入之前生效,在元素
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费精品视频在线| www视频免费看| 亚洲视频在线观看网站| 亚洲免费日韩无码系列| 日韩精品无码免费专区午夜| 久久久亚洲裙底偷窥综合| 日本成人在线免费观看| 国产成人精品日本亚洲18图| 免费中文字幕不卡视频| 日本不卡免费新一区二区三区| 免费中文字幕在线| 99久久综合精品免费 | 国产成人无码综合亚洲日韩| 国产高清免费视频| 亚洲国产精品久久久久网站 | 国产日韩一区二区三免费高清| 亚洲一区二区三区在线网站| 亚洲日本va午夜中文字幕久久| 亚洲精品在线免费观看视频| 人碰人碰人成人免费视频| 亚洲中文字幕人成乱码| 18禁免费无码无遮挡不卡网站| 精品无码一级毛片免费视频观看| 亚洲欧洲日产国码在线观看| 91香蕉成人免费网站| 51午夜精品免费视频| 亚洲不卡中文字幕无码| 日本视频免费在线| 成年人免费的视频| 永久在线观看免费视频| 黄色片网站在线免费观看| 亚洲日本国产综合高清| 亚洲电影一区二区| 亚洲亚洲人成综合网络| 免费观看在线禁片| 成人免费夜片在线观看| 风间由美在线亚洲一区| 亚洲午夜在线播放| 亚洲另类自拍丝袜第1页| 亚洲国产精品久久66| 久久精品亚洲日本佐佐木明希|