vue3 使用transition创建路由动画(超详细)

首先在组件中使用transition标签的前提是要写入在RouterView中,虽然不会报错,但是会有警告,而且路由动画不会生效

vue官网的一句话,transition 和 keep-alive 现在必须通过 v-slot API 在 RouterView 内部使用

<router-view v-slot="{ Component }">
  <transition>
    <keep-alive>
      <component :is="Component" />
    </keep-alive>
  </transition>
</router-view>

下面是我的路由切换,注释的很详细,认真看

<template>
  <div class="s">
    <Router-Link to="/home">home</Router-Link>
    <br />
    <Router-Link to="/about">about</Router-Link>
    <div class="box">
      <RouterView v-slot="{ Component }" >
        <transition name="fade">
            <component :is="Component" />
        </transition>
      </RouterView>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { reactive, toRefs } from "vue";
</script>
<style lang="less" scoped>
html,
body,
#app,
.box {
  margin: 0 auto;
  width: 50%;
  height: 100%;
  background: bisque;
}
.fade-enter-from{   /* 进入时的透明度为0 和 刚开始进入时的原始位置通过active透明度渐渐变为1 */  
  opacity: 0;
  transform: translateX(-100%);
}

.fade-enter-to{   /*定义进入完成后的位置 和 透明度 */
  transform: translateX(0%);
  opacity: 1; 
}

.fade-leave-active,.fade-enter-active {
    transition: all 0.5s ease-out;
}

.fade-leave-from { /* 页面离开时一开始的css样式,离开后为leave-to,经过active渐渐透明 */
  transform: translateX(0%);
  opacity: 1;
}

.fade-leave-to{   /* 这个是离开后的透明度通过下面的active阶段渐渐变为0 */  
  transform: translateX(100%);
  opacity: 0;
}
</style>
  • 官方的路由切换动画名称原文 // v-enter  v:指的是transition的name名称
  • 在进入/离开的过渡中,会有 6 个 class 切换。

  • v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

  • v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

  • v-enter-to2.1.8 版及以上定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。

  • v-leave:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

  • v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

  • v-leave-to2.1.8 版及以上定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除

  • 通过下面的效果你能够直观的明白样式的切换

当你的动画未生效时,考虑以下几点 vue官方的回答:

:key=xxx 给过渡标签加上key,这样每次切换时都会进行过渡动画的实现。

并且 过渡动画只会在下面四个情况生效

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

 另外transition还有一个mode属性(个人解答):

  • in-out : 新dom元素进入完毕已经到达地点后旧dom元素才会离开 a是要进入的dom,b是要离开的dom,b要等待a进入完成后,b才会执行自己的离开动画。

        

  <div class="s">
    <Router-Link to="/home">home</Router-Link>
    <br />
    <Router-Link to="/about">about</Router-Link>
    <div class="box">
      <RouterView v-slot="{ Component }" >
        <transition name="fade" mode="in-out">  //<==在这呢
            <component :is="Component" />
        </transition>
      </RouterView>
    </div>
  </div>

        in-out的效果

        

  • out-in:要离开的dom元素离开完毕后,要进入的dom元素才开始进入。
  <div class="s">
    <Router-Link to="/home">home</Router-Link>
    <br />
    <Router-Link to="/about">about</Router-Link>
    <div class="kkk">
      <RouterView v-slot="{ Component }" >
        <transition name="fade" mode="out-in">  //<==在这呢
            <component :is="Component" />
        </transition>
      </RouterView>
    </div>
  </div>
  • out-in效果:

        

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中的路由跳转过渡动画可以通过使用Vue的过渡系统来实现。在路由跳转时,你可以通过给需要过渡的元素添加过渡类名来实现动画效果。 首先,在Vue 3中,你需要使用`<transition>`组件来包裹需要过渡的元素。在跳转到新页面时,你可以使用Vue Router提供的`<RouterView>`组件来渲染新页面的内容。 接下来,你可以在`<transition>`组件中定义不同的过渡效果。你可以使用Vue的内置的过渡类名,如`enter`、`leave`、`enter-active`、`leave-active`等,来定义元素进入和离开时的过渡效果。通过给元素添加这些类名,你可以使用CSS来定义相应的过渡动画。 以下是一个简单的示例,展示了如何使用Vue 3的路由跳转过渡动画: ```html <template> <transition name="fade"> <RouterView /> </transition> </template> <style> .fade-enter { opacity: 0; } .fade-leave-to { opacity: 0; } .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } </style> ``` 在上面的示例中,我们给`<transition>`组件添加了`name`属性,并设为"fade"。在CSS中,我们定义了`fade-enter`和`fade-leave-to`类来控制元素的透明度,并使用`fade-enter-active`和`fade-leave-active`类来定义过渡动画的持续时间。 当路由跳转时,新页面的内容将被包裹在`<transition>`组件中,并且会根据CSS的定义来显示过渡动画。 通过使用Vue的过渡系统,你可以轻松地为Vue 3的路由跳转添加动画效果。希望这个简单的示例能帮助你更好地理解Vue 3中路由跳转过渡动画的实现方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3中实现路由跳转的过渡动画(一)](https://blog.csdn.net/fang_my/article/details/125578420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值