最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3使用transition實現組件切換的過渡效果

 更新時間:2024年09月04日 09:44:42   作者:Stack Stone  
<Transition> 是一個內置組件,這意味著它在任意別的組件中都可以被使用,無需注冊,它可以將進入和離開動畫應用到通過默認插槽傳遞給它的元素或組件上,本文介紹了Vue3使用transition實現組件切換的過渡效果,需要的朋友可以參考下

由于我想在項目中實現路由組件切換時的平滑過渡效果,以避免頁面加載時的突兀感,大致效果如下:

在這里插入圖片描述

上面的代碼是使用的若依的代碼,代碼具體如下所示:

<section class="app-main">
  <transition name="fade-transform" mode="out-in">
    <keep-alive :include="cachedViews">
      <router-view :key="key" />
    </keep-alive>
  </transition>
</section>
 
<style>
/* fade-transform */
.fade-transform-leave-active,
.fade-transform-enter-active {
  transition: all .5s;
}
 
.fade-transform-enter {
  opacity: 0;
  transform: translateX(-30px);
}
 
.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(30px);
}
 
/* breadcrumb transition */
.breadcrumb-enter-active,
.breadcrumb-leave-active {
  transition: all .5s;
}
</style>

我的項目使用的是 VUE3 + TS,于是我仿照上面的寫法寫了下面的代碼:

<template>
  <section
    :class="[
      sectionClass,
      'flex-1 p-[var(--app-content-padding)] w-[calc(100%-var(--app-content-padding)-var(--app-content-padding))] bg-[var(--app-content-bg-color)] dark:bg-[var(--el-bg-color)]'
    ]"
  >
    <!-- 渲染路由視圖 -->
    <router-view v-slot="{ Component }">
      <transition name="fade-transform" mode="out-in">
        <keep-alive :include="getCaches">
          <component :is="Component" :key="route.fullPath" />
        </keep-alive>
      </transition>
    </router-view>
  </section>
  <Footer v-if="footer" :class="footerClass" />
</template>
<style>
/* slide-left */
.fade-transform-enter-active,
.fade-transform-leave-active {
  transition: all 0.5s;
}
 
.fade-transform-enter {
  opacity: 0;
  transform: translateX(-10%); /* 進入時從屏幕左側外部滑入 */
}
 
.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(10%); /* 離開時滑出到屏幕右側外部 */
}
</style>

然而,在頁面渲染時,我遇到了以下問題:

在這里插入圖片描述

當選擇“菜單管理”時,控制臺打印出以下警告信息:

[Vue warn]: Component inside <Transition> renders non-element root node that cannot be animated.

此時,當我嘗試切換到其他路由頁面時,頁面會顯示為空白。出現此問題的原因在于,Vue 3 中的 組件要求其子節(jié)點必須是一個元素節(jié)點。

然而,由于我在 <router-view> 組件中使用了 v-slot 來獲取路由組件的引用,并在 <component> 中渲染該引用,而我的 component 代碼中存在多個節(jié)點,導致 Vue 報出錯誤。

為了避免此問題,我將所有子組件都包裹在一個單一的根元素內,例如將原先的 Menu 組件改寫為如下代碼結構:

<template>
  <div class="app-container">
    <!-- 菜單管理的組件內容 -->
  </div>
</template>

雖然解決了組件渲染的問題,但我又發(fā)現,頁面切換時只有前一個組件消失時有過渡效果,而后一個組件顯示時卻是直接展現,沒有過渡效果。如下所示:

在這里插入圖片描述

進入效果無效的解決辦法是我們需要手動指定enter-from-class,如果不指定enter-form-class,則只有離開時候的動畫有效。
這個在vue2中沒有出現,vue3中是這樣的,而且只要進入的這一步需要自己指定。

最后代碼如下:

<template>
  <section
    :class="[
      sectionClass,
      'flex-1 p-[var(--app-content-padding)] w-[calc(100%-var(--app-content-padding)-var(--app-content-padding))] bg-[var(--app-content-bg-color)] dark:bg-[var(--el-bg-color)]'
    ]"
  >
    <router-view v-slot="{ Component }">
      <transition name="fade-transform" mode="out-in" enter-from-class="fade-transform-enter">
        <keep-alive :include="getCaches">
          <component :is="Component" :key="route.fullPath" />
        </keep-alive>
      </transition>
    </router-view>
  </section>
  <Footer v-if="footer" :class="footerClass" />
</template>
<style>
/* slide-left */
.fade-transform-enter-active,
.fade-transform-leave-active {
  transition: all 0.5s;
}
 
.fade-transform-enter {
  opacity: 0;
  transform: translateX(-100px); /* 進入時從屏幕左側外部滑入 */
}
 
.fade-transform-leave-to {
  opacity: 0;
  transform: translateX(10%); /* 離開時滑出到屏幕右側外部 */
}
</style>

效果如下:

在這里插入圖片描述

以上就是Vue3使用transition實現組件切換的過渡效果的詳細內容,更多關于Vue3 transition組件切換過度的資料請關注腳本之家其它相關文章!

相關文章

  • vue如何實現簡易流程圖

    vue如何實現簡易流程圖

    這篇文章主要介紹了vue如何實現簡易流程圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • petite?vue的使用示例詳解

    petite?vue的使用示例詳解

    這篇文章主要為大家介紹了petite?vue的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Vue實現驗證碼功能

    Vue實現驗證碼功能

    這篇文章主要為大家詳細介紹了Vue實現驗證碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Vue2無法監(jiān)聽數組下標和對象新增屬性的原因和解決方法

    Vue2無法監(jiān)聽數組下標和對象新增屬性的原因和解決方法

    文章詳細解釋了Vue2中無法監(jiān)聽對象屬性新增/刪除和數組下標變化的原因,并提供了解決方案,如使用Vue.set和重寫數組方法,還對比了Vue3的Proxy,強調了Proxy在監(jiān)聽機制和性能上的優(yōu)勢,需要的朋友可以參考下
    2026-05-05
  • vue中如何攜帶參數跳轉頁面

    vue中如何攜帶參數跳轉頁面

    這篇文章主要介紹了vue中如何攜帶參數跳轉頁面問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue必學知識點之forEach()的使用

    Vue必學知識點之forEach()的使用

    在前端開發(fā)中,經常會遇到一些通過遍歷循環(huán)來獲取想要的內容的情形,這時候就需要用到forEach()了,下面這篇文章主要給大家介紹了關于Vue必學知識點之forEach()使用的相關資料,需要的朋友可以參考下
    2021-05-05
  • Vue3+Vite+TS使用elementPlus時踩的坑及解決

    Vue3+Vite+TS使用elementPlus時踩的坑及解決

    這篇文章主要介紹了Vue3+Vite+TS使用elementPlus時踩的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 使用VueCli3+TypeScript+Vuex一步步構建todoList的方法

    使用VueCli3+TypeScript+Vuex一步步構建todoList的方法

    這篇文章主要介紹了使用VueCli3+TypeScript+Vuex一步步構建todoList的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • vue使用Google Recaptcha驗證的實現示例

    vue使用Google Recaptcha驗證的實現示例

    我們最近的項目中需要使用谷歌機器人驗證,所以就動手實現一下,本文就來詳細的介紹一下vue Google Recaptcha驗證,感興趣的可以了解一下
    2021-08-08
  • 解決Vue使用mint-ui loadmore實現上拉加載與下拉刷新出現一個頁面使用多個上拉加載后沖突問題

    解決Vue使用mint-ui loadmore實現上拉加載與下拉刷新出現一個頁面使用多個上拉加載后沖突問題

    這篇文章主要介紹了解決Vue使用mint-ui loadmore實現上拉加載與下拉刷新出現一個頁面使用多個上拉加載后沖突問題,需要的朋友可以參考下
    2017-11-11

最新評論

夏津县| 延庆县| 康保县| 武安市| 微博| 那曲县| 云梦县| 南平市| 乌拉特中旗| 常宁市| 东光县| 积石山| 涟源市| 三亚市| 松滋市| 建阳市| 拉萨市| 紫阳县| 锡林郭勒盟| 沁水县| 尼玛县| 仪征市| 博爱县| 阿克苏市| 秭归县| 奉节县| 鱼台县| 赤峰市| 讷河市| 莱芜市| 宁武县| 昌图县| 于都县| 临安市| 永安市| 岑溪市| 墨脱县| 石渠县| 乌海市| 昂仁县| 永泰县|