<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關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:57:43
        文檔

        vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例

        vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例:交錯(cuò)過渡效果 花里胡哨,華而不...真香 基于vue的,需要你對(duì) vue 的 transition 和 transition-group有過使用和了解。 transition vue的文檔對(duì) transtion 組件已經(jīng)有了很詳細(xì)的 分析 了。 這里說一下我的理解: transtion 是vue提供的一個(gè)
        推薦度:
        導(dǎo)讀vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例:交錯(cuò)過渡效果 花里胡哨,華而不...真香 基于vue的,需要你對(duì) vue 的 transition 和 transition-group有過使用和了解。 transition vue的文檔對(duì) transtion 組件已經(jīng)有了很詳細(xì)的 分析 了。 這里說一下我的理解: transtion 是vue提供的一個(gè)

        交錯(cuò)過渡效果

        花里胡哨,華而不...真香

        基于vue的,需要你對(duì) vue 的 transition 和 transition-group有過使用和了解。

        transition

        vue的文檔對(duì) transtion 組件已經(jīng)有了很詳細(xì)的 分析 了。

        這里說一下我的理解:

        transtion 是vue提供的一個(gè)抽象組件,會(huì)在 合適的時(shí)機(jī) 幫我們操作其包裹的子元素。

        這個(gè)合適的時(shí)機(jī)是:

        1. beforeEnter dom 從 js 生成,并剛插入頁面的 那一幀(對(duì)應(yīng)下圖的動(dòng)畫開始)
        2. enter dom 插入頁面之后的 下一幀(對(duì)應(yīng)下圖的動(dòng)畫中)
        3. afterEnter dom 動(dòng)畫完成之后的 下一幀(對(duì)應(yīng)下圖的動(dòng)畫結(jié)束)


        transition-group

        ransition-group組件 會(huì)對(duì)包裹的列表中每一個(gè)元素批量進(jìn)行 transtion組件 的操作。

        html

        <div id="app" @click="num === 0 ? num++ : num = 5">
         <transition-group name="list">
         <item v-for="n in num" :key=n />
         </transition-group>
        </div>
        

        css

        .list-enter {
         opacity: 0;
         transform: translateY(100%);
        }
        .list-enter-active {
         transition: .3s;
        }
        /* enter-to其實(shí)可以不用寫, 沒有顯性寫明,就是默認(rèn)的opacity: 1;transform: none; */
        .list-enter-to {
         opacity: 1;
         transform: translateY(0);
        }
        


        接下來給 每個(gè)列表項(xiàng) 加上不同 延時(shí) 即可。

        transition-delay

        css

        .list-enter-active:nth-child(5n+2) {
         transition-delay: .3s;
        }
        .list-enter-active:nth-child(5n+3) {
         transition-delay: .5s;
        }
        .list-enter-active:nth-child(5n+4) {
         transition-delay: .7s;
        }
        .list-enter-active:nth-child(5n+5) {
         transition-delay: .9s;
        }
        


        用 transition-delay 配合 css選擇器,確實(shí)可以實(shí)現(xiàn)交錯(cuò)過渡,

        但是缺點(diǎn)也很明顯,要寫大量的 css ,修改起來也不靈活。

        接下來我們用vue的 JavaScript鉤子 來實(shí)現(xiàn)。

        setTimeout

        html

        <div id="app" @click="num === 0 ? num++ : num = 5">
         <!-- 這里加上 v-bind:css="false" 讓vue跳過對(duì)css的檢測(cè),讓我們更好控制 動(dòng)畫完成的時(shí)機(jī) -->
         <transition-group 
         v-bind:css="false"
         v-on:before-enter="beforeEnter" 
         v-on:enter="enter"
         v-on:after-enter="afterEnter">
        
         <item v-for="(n,index) in num" :key=n :data-delay=index*100 />
        
         </transition-group>
        </div>
        
        

        當(dāng)只用 JavaScript 過渡的時(shí)候,在 enter 和 leave 中必須使用 done 進(jìn)行回調(diào)。否則,它們將被同步調(diào)用,過渡會(huì)立即完成。

        new Vue({
         el: "#app",
         data: () => ({
         num: 0
         }),
         methods: {
         //讓我們?cè)?beforeEnter enter afterEnter 鉤子里,把 vue 幫我們做的事,自己做一遍:
         //添加移除 class 類名,監(jiān)聽 transitionend 事件。
         beforeEnter(dom) {
         dom.classList.add('list-enter', 'list-enter-active');
         },
         enter(dom,done) {
         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(); //調(diào)用done() 告訴vue動(dòng)畫已完成,以觸發(fā) afterEnter 鉤子
         });
         }, delay)
         },
         afterEnter(dom) {
         dom.classList.remove('list-enter-to', 'list-enter-active');
         }
         }
        })
        
        


        目前來說,運(yùn)行良好,實(shí)現(xiàn)了交錯(cuò)過渡的效果,也不用寫大量的 css。

        回頭看看我們一共做了2件事,用 .list-enter .list-enter-to 和 setTimeout

        告訴瀏覽器,在不同的時(shí)間把列表項(xiàng),從opacity 0 translateY(100%) 過渡到,opacity 1 translateY(0)。

        告訴瀏覽器元素的不同狀態(tài),除了類名之外,

        我們可以直接操作dom,把樣式寫到內(nèi)聯(lián),

        除了完全不用寫css類名之外,

        還可以有更多的編程性。

        style

        html

        <div id="app" @click="num ? num++ : num=5">
         <transition-group 
         v-bind:css="false" 
         v-on:before-enter="beforeEnter" 
         v-on:enter="enter"
         v-on:after-enter="afterEnter">
        
         <item v-for="(n,index) in num" 
         :key=n 
         :data-delay=index*100 
         data-y="100%"
         />
        
         </transition-group>
         </div>
        
        
        new Vue({
         el: "#app",
         data: () => ({
         num: 0
         }),
         methods: {
         beforeEnter(dom) {
         let { x = 0, y = 0, s = 1, opacity = 0 } = dom.dataset;
         dom.style.cssText = `transition: .3s;opacity: ${opacity};transform: scale(${s}) translateX(${x}) translateY(${y});`;
         },
         enter(dom,done) {
         let delay = dom.dataset.delay;
         setTimeout(function () {
         dom.style.cssText = `transition: .3s;opacity: 1;transform: scale(1) translateX(0) translateY(0);`;
         //監(jiān)聽 transitionend 事件
         var transitionend = window.ontransitionend ? "transitionend" : "webkitTransitionEnd";
         dom.addEventListener(transitionend, function onEnd() {
         dom.removeEventListener(transitionend, onEnd);
         done(); //調(diào)用done() 告訴vue動(dòng)畫已完成,以觸發(fā) afterEnter 鉤子
         });
         }, delay)
         },
         afterEnter(dom) {
         dom.style.cssText = "";
         }
         }
        })
        
        


        嗯 不錯(cuò),不過既然都上 js 了,能限制的就只有你的想象力了。

        html

         <item v-for="(n,index) in num" 
         :key=n 
         :data-delay=index*100 
         :data-x="index%2 === 0 ? '-50%' : '50%'" 
         :data-y="getRandom()+'%'"
         :data-s="Math.random()"
         />
        
        getRandom() {
         var rate = Math.floor(Math.random() * 90 + 10);
         return Math.random() > 0.5 ? rate : -1 * rate;
        }
        
        


        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例

        vue的列表交錯(cuò)過渡實(shí)現(xiàn)代碼示例:交錯(cuò)過渡效果 花里胡哨,華而不...真香 基于vue的,需要你對(duì) vue 的 transition 和 transition-group有過使用和了解。 transition vue的文檔對(duì) transtion 組件已經(jīng)有了很詳細(xì)的 分析 了。 這里說一下我的理解: transtion 是vue提供的一個(gè)
        推薦度:
        標(biāo)簽: VUE 列表 實(shí)現(xiàn)
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 无码的免费不卡毛片视频| 国产成人亚洲午夜电影| 免费一级毛片无毒不卡| 亚洲午夜AV无码专区在线播放 | 亚洲经典千人经典日产| 夫妻免费无码V看片| 亚洲精品无码中文久久字幕| 最近中文字幕mv免费高清电影 | 黄色片在线免费观看| 久久久久se色偷偷亚洲精品av| 久草在视频免费福利| 亚洲欧美乱色情图片| 日批日出水久久亚洲精品tv| 免费又黄又爽又猛大片午夜 | 大地资源二在线观看免费高清| 国产成人精品日本亚洲11| 免费观看一级毛片| 国产亚洲精品仙踪林在线播放| 国产精品亚洲精品日韩已方| 日本中文字幕免费高清视频| 亚洲国产美女精品久久| 精品久久洲久久久久护士免费 | 亚洲成av人片在线观看天堂无码| 国产精品美女久久久免费 | 亚洲精品综合一二三区在线| 免费能直接在线观看黄的视频| 亚洲日本在线电影| 亚洲国产天堂久久综合| 99久久成人国产精品免费| 亚洲精品视频观看| 国产婷婷高清在线观看免费| a级黄色毛片免费播放视频| 亚洲国产精品线观看不卡| 国产特级淫片免费看| 精品视频在线免费观看| 亚洲av永久综合在线观看尤物| 免费看一级做a爰片久久| 久久成人免费播放网站| 日韩国产欧美亚洲v片| 亚洲成Av人片乱码色午夜| 成**人免费一级毛片|