首頁 > web前端 > Vue.js > Vue3之元素和組件的動畫怎麼切換

Vue3之元素和組件的動畫怎麼切換

PHPz
發布: 2023-05-14 14:16:11
轉載
949 人瀏覽過

    實例解析

    元素間的動畫切換

    #元素之間的動畫切換指的是兩個dom元素之間的切換,例如一個div消失,另一個div顯示,消失對應著漸出的效果,顯示對應漸入的效果,本例我們以兩個div,一個顯示hello world,另一個顯示bye world,然後使用一個按鈕控制動畫的切換,程式碼如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>元素切换动画的实现</title>
        <style>
            .v-enter-from{
                opacity: 0;
            }
            .v-enter-active{
                transition: opacity 1s ease-in;
            }
            .v-enter-to{
                opacity: 1;
            } 
            .v-leave-from{
                opacity: 1;
            }
            .v-leave-active{
                transition:opacity 1s ease-in
            }
            .v-leave-to{
                opacity: 0;
            }
        </style>
        <script src="https://unpkg.com/vue@next"></script>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
     const app = Vue.createApp({
            data() {
                return {
                   show:false
                }
            },
            methods: {
                handleClick(){
                  this.show = !this.show;
                }
            },
            template: 
            `
            <transition mode="out-in" appear>
                <div v-if="show">hello world </div>
                <div v-else="show" >bye world </div>
            </transition>
            <button @click="handleClick">switch</button>
            `
        });
        const vm = app.mount(&#39;#root&#39;);
    </script>
    登入後複製

    如上面的程式碼所示,我們使用CSS定義好漸入和漸出的效果,然後將我們要做動畫的div放到<transition></transition>標籤之間,使用一個Boolean變數show控制元素的顯示和隱藏,當我們點擊按鈕的時候,執行handleClick函數,將show變數取反,達到切換的效果。在程式碼中我們也看到了在transition標籤上使用了一個mode="out-in",這個mode的值其實還有一個是mode=" in-out",兩者的差異如下:

    mode="out-in": 表示兩個元素切換的時候,目前的元素先消失,待顯示的元素再顯示mode="in-out":表示兩個元素切換的時候,待顯示的元素先顯示,目前的元素再消失

    讀者可以將這兩個屬性都試試,看下效果,印象會更深

    在程式碼中我們看到有一個屬性appear,這個屬性的意思是當我們在瀏覽器中開啟介面的時候執行動畫,否則頁面在載入的時候沒有動畫

    元件間的動畫切換

    在Vue中我們更多的會使用元件的方式,其實元件之間也是可以做動畫切換的實現的,這裡我們可以把上面的範例改造下,以動態元件的方式實現下上面元素間切換的動畫效果,程式碼如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>组件间切换动画的实现</title>
        <style>
            .v-enter-from{
                opacity: 0;
            }
            .v-enter-active{
                transition: opacity 1s ease-in;
            }
            .v-enter-to{
                opacity: 1;
            } 
            .v-leave-from{
                opacity: 1;
            }
            .v-leave-active{
                transition:opacity 1s ease-in
            }
            .v-leave-to{
                opacity: 0;
            }
        </style>
        <script src="https://unpkg.com/vue@next"></script>
    </head>
    <body>
        <div id="root"></div>
    </body>
    <script>
        // 多个单组件之间的动画
        const ComponentA = {
            template:&#39;<div>hello world</div>&#39;
        }
        const ComponentB = {
            template:&#39;<div>bye world</div>&#39;
        }
     const app = Vue.createApp({
            data() {
                return {
                   component:&#39;component-a&#39;
                }
            },
            methods: {
                handleClick(){
                   if(this.component === &#39;component-a&#39;){
                    this.component = &#39;component-b&#39;;
                   }else{
                    this.component = &#39;component-a&#39;;
                   }
                }
            },
            components:{
                &#39;component-a&#39;:ComponentA,
                &#39;component-b&#39;:ComponentB
            },
            // 动态组件的方式
            template: 
            `
            <transition mode="out-in" appear>
                <component :is="component" />
            </transition>
            <button @click="handleClick">switch</button>
            `
        });
        const vm = app.mount(&#39;#root&#39;);
    </script>
    登入後複製

    以上是Vue3之元素和組件的動畫怎麼切換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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