首頁 > web前端 > Vue.js > 主體

vue的交錯過渡怎麼實現

藏色散人
發布: 2022-12-26 15:38:57
原創
2667 人瀏覽過

vue實作交錯過渡的方法:1、開啟對應的vue檔;2、使用ransition-group元件對包裹的清單中每一個元素批次進行transtion元件的動作;3、給每個清單項加上不同縮時即可。

vue的交錯過渡怎麼實現

本教學操作環境:Windows10系統、Vue 3版、Dell G3電腦。

vue的交錯過渡怎麼實現?

Vue 的清單交錯過渡

vue的交錯過渡怎麼實現

基於vue的,需要你對vue 的vue的交錯過渡怎麼實現

vue的交錯過渡怎麼實現-group

#有過使用和了解。

vue的交錯過渡怎麼實現

vue的文檔對

transtion

元件已經有了很詳細的
    分析
  1. 了。 這裡說一下我的理解:
  2. transtion 是vue提供的一個抽像元件,會在 適當的時機 幫我們操作其包裹的子元素。
  3. 這個適合的時機是:
beforeEnter
dom 從js 生成,並剛插入頁面的那一幀(對應下圖的動畫開始)vue的交錯過渡怎麼實現
enter
dom 插入頁面之後的下一幀(對應下圖的動畫中)

afterEnter dom 動畫完成之後的下一幀(對應下圖的動畫結束)

vue的交錯過渡怎麼實現-group
#vue的交錯過渡怎麼實現-group

ransition-group

元件會對包裹的清單中每一個元素批次進行

transtion
元件的操作。 vue的交錯過渡怎麼實現-delay
html
<div>
    <vue>
        <item></item>
    </vue>的交錯過渡怎麼實現-group>
</div>
登入後複製
css.list-enter {    opacity: 0;    transform: translateY(100%);
}.list-enter-active {    vue的交錯過渡怎麼實現: .3s;
}/* enter-to其实可以不用写, 没有显性写明,就是默认的opacity: 1;transform: none;  */.list-enter-to {    opacity: 1;    transform: translateY(0);
}
登入後複製

接下來為 每個清單項目 加上不同 延遲 即可。

vue的交錯過渡怎麼實現-delay

css.list-enter-active:nth-child(5n+2) {    vue的交錯過渡怎麼實現-delay: .3s;
}.list-enter-active:nth-child(5n+3) {    vue的交錯過渡怎麼實現-delay: .5s;
}.list-enter-active:nth-child(5n+4) {    vue的交錯過渡怎麼實現-delay: .7s;
}.list-enter-active:nth-child(5n+5) {    vue的交錯過渡怎麼實現-delay: .9s;
}复制代码
登入後複製

#用vue的交錯過渡怎麼實現-delay 配合css選擇器,確實可以實作交錯過渡,
vue的交錯過渡怎麼實現但是缺點也很明顯,要寫大量的css ,修改起來也不靈活。
接下來我們用vue的 JavaScript鉤子 來實作。

vue的交錯過渡怎麼實現

html<div>
    <!-- 这里加上 v-bind:css="false" 让vue跳过对css的检测,让我们更好控制 动画完成的时机 -->
    <vue>

        <item></item>

    </vue>的交錯過渡怎麼實現-group></div>复制代码
登入後複製

當只用 JavaScript 過渡的時候,在 enter 和 leave 中必須使用 done 進行回呼。否則,它們將被同步調用,過渡會立即完成。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">new Vue({    el: &quot;#app&quot;,    data: () =&gt; ({        num: 0     }),    methods: {        //让我们在 beforeEnter enter afterEnter 钩子里,把 vue 帮我们做的事,自己做一遍:         //添加移除 class 类名,监听 vue的交錯過渡怎麼實現end 事件。         beforeEnter(dom) {             dom.classList.add('list-enter', 'list-enter-active');         },        enter(dom,done) {            let delay = dom.dataset.delay;            vue的交錯過渡怎麼實現(function () {                 dom.classList.remove('list-enter');                 dom.classList.add('list-enter-to');                //监听 vue的交錯過渡怎麼實現end 事件                 var vue的交錯過渡怎麼實現end = window.onvue的交錯過渡怎麼實現end ? &quot;vue的交錯過渡怎麼實現end&quot; : &quot;webkitTransitionEnd&quot;;                 dom.addEventListener(vue的交錯過渡怎麼實現end, function onEnd() {                   dom.removeEventListener(vue的交錯過渡怎麼實現end, onEnd);                  done(); //调用done() 告诉vue动画已完成,以触发 afterEnter 钩子                 });             }, delay)         },        afterEnter(dom) {             dom.classList.remove('list-enter-to', 'list-enter-active');         }     } })复制代码</pre><div class="contentsignin">登入後複製</div></div>

目前來說,運作良好,實現了交錯過渡的效果,也不用寫大量的 css。

回頭看看我們一共做了2件事,用

.list-enter .list-enter-to

vue的交錯過渡怎麼實現

#告訴瀏覽器,在不同的時間把列表項,從

opacity 0 translateY(100%

) 過渡到,

opacity 1 translateY(0)

vue的交錯過渡怎麼實現告訴瀏覽器元素的不同狀態,除了類別名稱之外,
我們可以直接操作dom,把樣式寫到內聯,

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

還可以有更多的程式設計性。 vue的交錯過渡怎麼實現
vue的交錯過渡怎麼實現
html
<div>
        <vue>

            <item></item>

        </vue>的交錯過渡怎麼實現-group>
    </div>
登入後複製
new Vue({
    el: "#app",
    data: () => ({
        num: 0
    }),
    methods: {        beforeEnter(dom) {
            let { x = 0, y = 0, s = 1, opacity = 0 } = dom.dataset;
            dom.vue的交錯過渡怎麼實現.cssText = `vue的交錯過渡怎麼實現: .3s;opacity: ${opacity};transform: scale(${s}) translateX(${x}) translateY(${y});`;
        },        enter(dom,done) {
            let delay = dom.dataset.delay;            vue的交錯過渡怎麼實現(function () {
                dom.vue的交錯過渡怎麼實現.cssText = `vue的交錯過渡怎麼實現: .3s;opacity: 1;transform: scale(1) translateX(0) translateY(0);`;                //监听 vue的交錯過渡怎麼實現end 事件
                var vue的交錯過渡怎麼實現end = window.onvue的交錯過渡怎麼實現end ? "vue的交錯過渡怎麼實現end" : "webkitTransitionEnd";
                dom.addEventListener(vue的交錯過渡怎麼實現end, function onEnd() {
                  dom.removeEventListener(vue的交錯過渡怎麼實現end, onEnd);                  done(); //调用done() 告诉vue动画已完成,以触发 afterEnter 钩子
                });
            }, delay)
        },        afterEnter(dom) {
            dom.vue的交錯過渡怎麼實現.cssText = "";
        }
    }
})
登入後複製
#######嗯 不錯,不過既然都上 js 了,能限制的就只有你的想像了。 ###
html
    <item></item>
登入後複製
getRandom() {    var rate = Math.floor(Math.random() * 90 + 10);    return Math.random() > 0.5 ? rate : -1 * rate;
}
登入後複製
############推薦學習:《###vue.js影片教學###》######

以上是vue的交錯過渡怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板