国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3 Transition組件給頁面切換加動畫效果

這篇具有很好參考價值的文章主要介紹了Vue3 Transition組件給頁面切換加動畫效果。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本文分享一個Vue頁面組件之間切換的動畫效果,主要應(yīng)用在移動端設(shè)備,使用戶在切換頁面或者切換組件的時候交互體驗感更好一些,使用的是Vue3自帶的Transition組件。


一、Transition組件是什么?

先簡單介紹一下Transition組件,來自官方介紹:

<Transition> 是一個內(nèi)置組件,這意味著它在任意別的組件中都可以被使用,無需注冊。它可以將進(jìn)入和離開動畫應(yīng)用到通過默認(rèn)插槽傳遞給它的元素或組件上。進(jìn)入或離開可以由以下的條件之一觸發(fā):

  • 由 v-if 所觸發(fā)的切換
  • 由 v-show 所觸發(fā)的切換
  • 由特殊元素 <component> 切換的動態(tài)組件
  • 改變特殊的 key 屬性

Vue3 Transition組件給頁面切換加動畫效果
簡單來說,左邊Enter是當(dāng)元素從無到有的時候觸發(fā),v-enter-to即頁面上顯示元素的最終狀態(tài);右邊Leave則與之相反,頁面上元素消失觸發(fā)Leave,從v-leave-from狀態(tài)變?yōu)?strong>v-leave-to狀態(tài)。知道了這個,那么接下來將應(yīng)用其component切換觸發(fā)的特性,編寫路由切換的動畫效果。

二、動畫效果

Vue3 Transition組件給頁面切換加動畫效果

分析&說明:

其中 Home 與 About 都是組件,點擊導(dǎo)航觸發(fā)組件切換,很顯然上面的切換是有兩個動畫效果的,當(dāng)頁面從 Home 組件 切換到 About 組件,Home 對應(yīng)的是Leave步驟,About 對應(yīng)的是Enter步驟,整體是從右往左發(fā)生了位移,所以from就是 translateX(0),to就是translateX(-100%),這么一說有沒有豁然開朗了呢,那么從 About 組件切換到 Home 組件就反過來,從左往右位移,不過這個有些特殊,后面會提到,先看完整代碼。

三、代碼

1. 頁面展示

<template>
  <div class="wrapper">
    <!-- 導(dǎo)航條 -->
    <nav>
      <RouterLink to="/">Home</RouterLink>
      <RouterLink to="/about">About</RouterLink>
    </nav>
    <!-- 動畫區(qū),設(shè)置flex布局 -->
    <div class="animation">
      <router-view v-slot="{ Component }">
        <transition :name="transitionName">
          <component :is="Component" />
        </transition>
      </router-view>
    </div>
  </div>
</template>

2. 動畫切換邏輯

<script setup>
import { RouterLink, useRouter } from 'vue-router';
import { ref } from 'vue';

let transitionName = ref();
let router = useRouter();
router.beforeEach((to, from) => {
  // 根據(jù)路由標(biāo)記判斷觸發(fā)哪個動畫
  if (to.meta.index > from.meta.index) {
  	// 從右往左動畫
    transitionName.value = 'slide-right';
  } else if (to.meta.index < from.meta.index) {
   	// 從左往右動畫
    transitionName.value = 'slide-left';
  } else {
    transitionName.value = '';
  }
});
</script>

3. 路由文件

// 省略部分代碼
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView,
      meta: {
        index: 1
      }
    },
    {
      path: '/about',
      name: 'about',
      component: () => import('../views/AboutView.vue'),
      meta: {
        index: 2
      }
    }
  ]

4. 樣式

.wrapper {
    overflow-x: hidden;
    .animation {
        display: flex;
        width: 200%;
        & > div {
            width: 50%;
        }
        .slide-left-enter-active,
        .slide-left-leave-active,
        .slide-right-enter-active,
        .slide-right-leave-active {
            transition: transform 0.3s;
        }

        .slide-right-enter-from {
            transform: translateX(0);
        }
        .slide-right-enter-to {
            transform: translateX(-100%);
        }
        .slide-right-leave-from {
            transform: translateX(0);
        }
        .slide-right-leave-to {
            transform: translateX(-100%);
        }

        .slide-left-enter-from {
            transform: translateX(-200%);
        }
        .slide-left-enter-to {
            transform: translateX(-100%);
        }
        .slide-left-leave-from {
            transform: translateX(0);
        }
        .slide-left-leave-to {
            transform: translateX(100%);
        }
    }
}

5. 實現(xiàn)原理

來看看慢動作演示:

Vue3 Transition組件給頁面切換加動畫效果

從這個動態(tài)圖能看出來,組件切換過程中新組件是立即加入到DOM,而舊組件的移除是先等待動畫結(jié)束后再移除,所以當(dāng)在外層定義了flex布局就會使其橫向排列。另外Transition總是在舊組件元素下方插入了新組件元素,所以一開始提到的從左往右移動的時候,根據(jù)flex布局定位,動畫開始時home組件本來是位于about右邊的,但是要使其位于about左邊,所以要設(shè)置其translateX(-200%)。

四、One More Thing

1、實現(xiàn)

從上面動態(tài)圖其實能發(fā)現(xiàn),元素Enter的時候,該元素上被添加上v-enter-active以及v-enter-to的樣式,當(dāng)然Leave過程也是類似的。如果你要問 v-enter-from 與 v-leave-from 怎么沒看到,那么從官方文檔上我們能知道:

v-enter-from:進(jìn)入動畫的起始狀態(tài)。在元素插入之前添加,在元素插入完成后的下一幀移除。
v-leave-from:離開動畫的起始狀態(tài)。在離開過渡效果被觸發(fā)時立即添加,在一幀后被移除。

所以看不到是正常的,我們可以按照文檔上給的思路實現(xiàn)一下這個過程,比如添加一個遮罩層元素的過渡效果:

const overlayNode = document.createElement('div');
overlayNode.className = 'my-overlay';

// 添加初始顯示的過渡效果
overlayNode.classList.add('my-overlay-enter-from');
overlayNode.classList.add('my-overlay-enter-active');

// 在body標(biāo)簽內(nèi)部插入此元素
document.body.appendChild(overlayNode);

const nextClass = () => {
  overlayNode.classList.remove('my-overlay-enter-from');
  overlayNode.classList.add('my-overlay-enter-to');
};
// 元素插入完成后的下一幀觸發(fā)
requestAnimationFrame(nextClass);

// 在過渡或動畫完成之后移除
setTimeout(() => {
  overlayNode.classList.remove('my-overlay-enter-to');
  overlayNode.classList.remove('my-overlay-enter-active');
}, 300);

樣式可以自己定義,我這里就不展示了,或者可以參考一下我上一篇文章給 Dialog組件 加遮罩層的過程。

2、多種寫法

當(dāng)我們知道原理了之后,寫法上就可以很靈活了,比如可以改成這樣子給過渡效果加動畫:

$slide-duration: 3s;
.slide-left-enter-active {
  animation: slide-left-in $slide-duration;
}
.slide-left-leave-active {
  animation: slide-left-out $slide-duration;
}
.slide-right-enter-active {
  animation: slide-right-in $slide-duration;
}
.slide-right-leave-active {
  animation: slide-right-out $slide-duration;
}
@keyframes slide-left-in {
  0% {
    transform: translateX(-200%);
  }
  100% {
    transform: translateX(-100%);
  }
}
@keyframes slide-left-out {
  0% {
    transform: translateX(0%);
  }
  100% {
    transform: translateX(100%);
  }
}
@keyframes slide-right-in {
  0% {
    transform: translateX(0%);
  }
  100% {
    transform: translateX(-100%);
  }
}
@keyframes slide-right-out {
  0% {
    transform: translateX(0%);
  }
  100% {
    transform: translateX(-100%);
  }
}

v-enter-active 與 v-leave-active 都是應(yīng)用于整個進(jìn)入動畫階段的,使用CSS的 animation 屬性直接自定義添加動畫也是可以的。


總結(jié)

以上就是全部內(nèi)容,這篇文章分享了Vue3的Transition組件,利用它能實現(xiàn)基于狀態(tài)變化的過渡和動畫效果,本文只是簡單介紹了一下使用方法,并做出了一種頁面切換的動畫效果,更多的動畫效果有待進(jìn)一步探索,大家可以自行研究。

如果此篇文章對您有幫助,歡迎您【點贊】、【收藏】!也歡迎您【評論】留下寶貴意見,共同探討一起學(xué)習(xí)~


擴展閱讀

Vue3 內(nèi)置組件 — Transition文章來源地址http://www.zghlxwxcb.cn/news/detail-490815.html

到了這里,關(guān)于Vue3 Transition組件給頁面切換加動畫效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue 分頁器組件+css動畫效果

    vue 分頁器組件+css動畫效果

    全網(wǎng)都找了一遍沒有找到符合UI需求的分頁動畫,于是就主動上手了 需求: 1、分頁最多顯示9頁,總頁數(shù)最多顯示無上限; 2、點擊下一頁的時候需要有動畫效果過度,如果當(dāng)前頁數(shù)是當(dāng)前顯示最后的一頁,則停了當(dāng)前顯示最后的位置,但是點擊下一頁的時候需要用戶感知 效

    2024年02月09日
    瀏覽(24)
  • 前端vue可以左右滾動的切換的tabs tabs選項卡 滑動動畫效果 自動寬度

    前端vue可以左右滾動的切換的tabs tabs選項卡 滑動動畫效果 自動寬度,?閱讀全文下載完整代碼請關(guān)注微信公眾號: 前端組件開發(fā) 效果圖如下: ? ? ? ? ? #### 使用方法 ```使用方法 swiperTabList: [\\\"2023-06-10\\\",\\\"2023-06-11\\\",\\\"2023-06-12\\\",\\\"2023-06-13\\\",\\\"2023-06-14\\\",\\\"2023-06-15\\\"], //導(dǎo)航列表 swiperTabIdx:

    2024年02月08日
    瀏覽(20)
  • vue 動畫(transition)

    在插入、更新、移除 DOM 元素時,在合適的時候給元素添加樣式類名,配合 CSS 樣式使用,實現(xiàn)動畫效果。 通俗來講,就是將要進(jìn)行動畫操作的 DOM 元素用 transition 標(biāo)簽包裹起來。在此html元素運動前,運動中,運動后這三個時候 vue 會給此 DOM 元素添加不同的 class ,然后配合

    2024年02月03日
    瀏覽(21)
  • Vue3實現(xiàn)帶動畫效果的tab欄切換

    Vue3實現(xiàn)帶動畫效果的tab欄切換

    效果圖如下所示: 實現(xiàn)思路: 其實很簡單 1、首先切換tab欄時tab標(biāo)簽激活下標(biāo)與對應(yīng)顯示內(nèi)容下標(biāo)要一致。 2、其次點擊tab欄切換時更新下標(biāo) 3、最后就是css添加動畫效果 這樣就 了?。?! 上全部代碼

    2024年02月22日
    瀏覽(14)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】Vue3實現(xiàn)選擇排序動畫效果與原理拆解

    【數(shù)據(jù)結(jié)構(gòu)與算法】Vue3實現(xiàn)選擇排序動畫效果與原理拆解

    刪除有序數(shù)組中的重復(fù)項 JavaScript實現(xiàn)選擇排序 選擇排序(Selection Sort)是一種簡單的排序算法,其基本思想是從待排序的數(shù)據(jù)中選擇最小(或最大)的元素,然后將其放到已排序的序列的末尾(或開頭)。該算法的時間復(fù)雜度為O(n^2),其中n是待排序數(shù)據(jù)的數(shù)量,因此在大規(guī)

    2024年02月13日
    瀏覽(32)
  • vue折疊展開transition動畫使用keyframes實現(xiàn)

    需求,我正常的菜單功能有隱藏與顯示功能,需要增加動畫 打開的時候?qū)挾葟?到300,關(guān)閉的時候,寬度從300到0

    2024年01月25日
    瀏覽(29)
  • vue3如何實現(xiàn)點擊不同的菜單頁切換局部頁面

    vue3如何實現(xiàn)點擊不同的菜單頁切換局部頁面

    我們可以使用router來實現(xiàn) 去餓了么(element-plus)找到自己喜歡的頁面然后按需導(dǎo)入,以下以自己的例子來實現(xiàn) 首先引入布局容器 然后引入菜單欄 引入這兩個,先看效果 此時基本的頁面準(zhǔn)備好了 容器是有這個屬性的,但默認(rèn)值為false 并把菜單欄里對應(yīng)的文字改為router-link 在

    2024年02月16日
    瀏覽(21)
  • transition 實現(xiàn)div伸縮動畫、3D翻轉(zhuǎn)動畫(vue版)、elementui走馬燈

    transition 實現(xiàn)div伸縮動畫、3D翻轉(zhuǎn)動畫(vue版)、elementui走馬燈

    代碼 ? template ?? ?div ?? ??? ?div ?? ??? ??? ? ?el-carousel :interval=\\\"4000\\\" type=\\\"card\\\" height=\\\"500px\\\" ?? ??? ??? ? ? ? ?el-carousel-item v-for=\\\"(i,index) in imageData\\\" :key=\\\"index\\\" ?? ??? ??? ? ? ? ? ?img :src=\\\"i.src\\\" style=\\\"width: 100%;height: 100%;\\\" ?? ??? ??? ? ? ? ?/el-carousel-item ?? ???

    2024年02月02日
    瀏覽(29)
  • vue3中如何實現(xiàn)通過點擊不同的按鈕切換不同的頁面

    vue3中如何實現(xiàn)通過點擊不同的按鈕切換不同的頁面

    完成以上需求,我們可以使用vue中的component標(biāo)簽來實現(xiàn)。 component是Vue.js中一個特殊的標(biāo)簽,用于動態(tài)地綁定其它組件。它可以與v-bind:is指令一起使用,來決定要渲染哪個組件。下面是示例代碼

    2024年02月09日
    瀏覽(31)
  • < 每日小技巧: 基于Vue狀態(tài)的過渡動畫 - Transition 和 TransitionGroup>

    < 每日小技巧: 基于Vue狀態(tài)的過渡動畫 - Transition 和 TransitionGroup>

    Vue 提供了兩個內(nèi)置組件,可以幫助用戶制作基于狀態(tài)( v-if / v-show )變化的過渡和動畫: Transition 會在一個元素或組件 進(jìn)入 和 離開 DOM 時應(yīng)用動畫。本章節(jié)會介紹如何使用它。 TransitionGroup 會在一個 v-for 列表中的元素或組件被插入,移動,或移除時應(yīng)用動畫。 TransitionGrou

    2024年02月02日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包