当前位置: 首页 > 知识库问答 >
问题:

vue.js - Vue Router 与 transition 组件结合,如何实现页面切换时旧页面驻留效果?

有宏峻
2024-07-23

我在使用transition实现页面的切换效果,期望的效果是当用户点击跳转时,当前页面A驻留不移动,新页面B从右往左推入,在新页面推入的过程中A始终可见,直至B将其覆盖。但是在实现过程中发现,页面A会直接消失且背景变为白色,而新页面B正常推入。

<template>
    <router-view v-slot="{ Component, route }">
        <transition  mode="out-in"  name="slide" appear>
                <div :key="route?.name" style="height: 100%;width: 100%;">
                    <component :is="Component" />
                </div>
        </transition>
    </router-view>
</template>
.slide-enter-from {
    // position: absolute;
    // left: 0;
    // top: 0;
  opacity: 0;
  transform: translateX(100%); 
}
.slide-enter-active {
  transition: all 0.5s ease; 
}
.slide-enter-to {

  opacity: 1;
  transform: translateX(0); 
}

.slide-leave-from {
    // position: absolute;
    // left: 0;
    // top: 0;
  opacity: 1;
  transform: translateX(0); 
}
.slide-leave-active {
  transition: all 0.1s ease;
}
.slide-leave-to {
  opacity: 0;
  transform: translateX(0); 
}

共有3个答案

蔚和安
2024-07-23

把 appear 属性去掉试试?

桓宜
2024-07-23

给页面离开设置动画,用 transition-delay 延迟播放动画。

stackblitz

周弘盛
2024-07-23

要实现你描述的页面切换效果,其中旧页面A在新页面B推入时保持可见直至被覆盖,你需要确保页面A在动画过程中不会被Vue Router的<router-view>组件自动移除。Vue Router在切换路由时,默认会移除旧的<router-view>组件内容并添加新的内容,但是通过使用<transition>组件和:key绑定,你可以控制这个行为。

在你的代码中,你已经正确地使用了:key绑定来区分不同的路由,但是你可能需要确保CSS样式允许页面A在动画过程中保持可见。此外,mode="out-in"意味着旧组件先完成过渡,新组件再开始过渡。对于你的需求,这可能不是必需的,因为你想让两个组件同时动画。

首先,请移除多余的mode="out-in"属性(它只应该出现一次)。然后,确保你的CSS样式允许页面A在动画期间可见。你的CSS代码看起来基本正确,但是可能需要添加一些额外的样式来确保页面A在动画期间不被隐藏或覆盖。

这里是一个更新后的示例:

<template>
  <router-view v-slot="{ Component, route }">
    <transition name="slide" appear>
      <div :key="route.name" style="position: relative; height: 100%; width: 100%; overflow: hidden;">
        <component :is="Component" />
      </div>
    </transition>
  </router-view>
</template>

<style scoped>
.slide-enter-active, .slide-leave-active {
  transition: all 0.5s ease;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.slide-enter-from {
  transform: translateX(100%);
}
.slide-enter-to, .slide-leave-from {
  transform: translateX(0);
}
.slide-leave-to {
  transform: translateX(-100%); /* 或者其他值,根据你的需要 */
}
</style>

在这个例子中,我移除了一个重复的mode="out-in"属性,并添加了position: relative;到包含<component><div>上。同时,我也将.slide-leave-totransform值更改为-100%,这样页面A就会向左移动而不是向右移动(根据你的描述,你可能想要这样的效果)。

注意,使用overflow: hidden;可以防止在动画期间出现内容溢出。这对于确保页面A在动画期间不会显示在页面B的下方是很重要的。

最后,请确保你的Vue Router配置正确,并且<router-view>组件被放置在正确的位置。如果问题仍然存在,请检查你的Vue版本和Vue Router版本是否与你的代码兼容。

 类似资料:
  • 本文向大家介绍Android fragment实现多个页面切换效果,包括了Android fragment实现多个页面切换效果的使用技巧和注意事项,需要的朋友参考一下 现在的APP首页大部分屏幕的下方显示一行Tab标签选项,点击不同的标签就可以切换到不同的界面。如下图: 我们之前都是用TabHost来实现,但是殊不知,TabHost并非是那么的简单,它的可扩展性非常的差,不能随意地定制Tab项显示

  • Vue 提供了多种方式支持动画过渡效果。例如在各个过渡阶段应用 CSS 类,提供钩子函数使用 JS 操作 DOM,使用第三方 CSS/JS 动画库等。 如果对 Vue 中内置的 transition 机制还不了解,可以阅读 官方的介绍。 在模板项目中,主要使用了最简单的应用 CSS 类的方式完成动画效果。 具体实现 在模板项目中,页面切换时,会有左右滑动效果。 具体表现为打开新页面时左滑展示,返回

  • 本文向大家介绍Android开发中ViewPager实现多页面切换效果,包括了Android开发中ViewPager实现多页面切换效果的使用技巧和注意事项,需要的朋友参考一下 ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入“Android-support-v4.jar” 首先必须知道:要使用ViewPager,必须要使用

  • 整个页面有2个部分, 第一部分如上图蓝色标注,蓝色部分高度大于浏览器高度, 滑动蓝色部分往上,当蓝色部分的底部和浏览器的底部的保持一致高度的时候, 希望蓝色部分固定住,类似sticky的效果, 继续滑动页面往上,白色部分会直接往上走,盖在蓝色部分往上滑动, 请问下这个效果有什么关键字吗

  • vue如何实现页面装修的

  • 本文向大家介绍Vue.js组件tabs实现选项卡切换效果,包括了Vue.js组件tabs实现选项卡切换效果的使用技巧和注意事项,需要的朋友参考一下 今天给大家分享一个小颖自己写的vue组件,因为小颖也才接触vue没多久,如果有什么不足的地方,希望大家提出来,小颖加以改正.以下就是具体如何实现tabs啦。 调用示例: 实现tabs: 效果图: 本文已被整理到了《Vue.js前端组件学习教程》,欢迎大

  • 本文向大家介绍js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果),包括了js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js实现的鼠标滚轮滚动切换页面效果的方法。分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: 更多关于jQuery特效相关内容感兴趣的读者可查看本站专题:《jQuery

  • 本文向大家介绍JS实现标签页切换效果,包括了JS实现标签页切换效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JS标签页切换的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。