首页 > 其他分享 >Vue3.0 路由动画(页面跳转)

Vue3.0 路由动画(页面跳转)

时间:2024-01-18 15:23:37浏览次数:25  
标签:translateX transform slide Vue3.0 meta tab 跳转 pageType 路由

前言

vue3.0的页面组件之前切换的动画效果,在移动端H5页面,交互体验比较好,

就是带Vue3的Transition 组件

 

之前的写法是 Transition 的组件要包在 routerView 外面,

但是3.0的语法就是要在 在里面了,不然会黄色警告

<div class="animation">
    <RouterView v-slot="{ Component, route }">
      <transition :name="getTransitionName" :appear="true">
        <KeepAlive>
          <component v-if="inited" :is="Component" :key="route.name" />
        </KeepAlive>
      </transition>
    </RouterView>
  </div>
getTransitionName 就是要你的动画名称 可以根据 你的路由切换来改变 然后这个可以封装成 全局的变量,
在pinia 内调用 定义 name的数值:
介绍下 这

先简单介绍一下Transition组件,来自官方介绍:

<Transition> 是一个内置组件,这意味着它在任意别的组件中都可以被使用,无需注册。它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上。进入或离开可以由以下的条件之一触发:

  • 由 v-if 所触发的切换
  • 由 v-show 所触发的切换
  • 由特殊元素 <component> 切换的动态组件
  • 改变特殊的 key 属性

官网的介绍图:

 

简单来说,左边Enter是当元素从无到有的时候触发,v-enter-to即页面上显示元素的最终状态;右边Leave则与之相反,页面上元素消失触发Leave,从v-leave-from状态变为v-leave-to状态。知道了这个,那么接下来将应用其component切换触发的特性,编写路由切换的动画效果。很显然上面的切换是有两个动画效果的,当页面从 Home 组件 切换到 About 组件,Home 对应的是Leave步骤,About 对应的是Enter步骤,整体是从右往左发生了位移,所以from就是 translateX(0),to就是translateX(-100%),那么从 About 组件切换到 Home 组件就反过来,从左往右位移

router文件

    {
      path: "/",
      name: pageName.home,
      meta: { pageType: "tab", index: 5 },
      component: () => import("@/views/home/Index.vue"),
    },
    {
      path: "/categories",
      name: pageName.categories,
      meta: { pageType: "tab", index: 4 },
      component: () => import("@/views/categories/Index.vue"),
    },

然后css.动画效果

就是平移 通过

transform: translateX(-100%); 这属性来实现
.animation {
  display: flex;
  width: 200%;
  flex: 1;
  overflow: hidden;

  & > 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%);
  }
}
发放 然后再你的 app.vue 项目里 通过路由钩子函数来实现 不同路由页面跳转的 方式 ,一般来说都是 主的跳转次的 right,次的回到主的用 left  
router.beforeEach((to: any, from: any) => {
  if (from.meta.pageType == "tab" && to.meta.pageType != "tab") {
    transitionName.value = 'slide-right';
    return;
  }

  if (from.meta.pageType != "tab" && to.meta.pageType == "tab") {
    transitionName.value = 'slide-left';
    return;
  }

  if ((from.meta.pageType == "tab" && to.meta.pageType == "tab") || (from.meta.pageType != "tab" && to.meta.pageType != "tab")) {
    if (to.meta.index > from.meta.index) {
      // 从右往左动画
      transitionName.value = 'slide-left';
    } else if (to.meta.index < from.meta.index) {
      // 从左往右动画
      transitionName.value = 'slide-right';
    } else {
      transitionName.value = '';
    }
  }
})
这样就完美了 ok 继续
 

标签:translateX,transform,slide,Vue3.0,meta,tab,跳转,pageType,路由
From: https://www.cnblogs.com/yf-html/p/17972580

相关文章

  • 路由--工作原理
    什么是<router-view>?<router-view>是VueRouter提供的一个特殊组件。它的作用是作为一个占位符,用于显示当前路由对应的组件。如何理解"路由出口"?把<router-view>想象成一个电影院的屏幕。你可以在这个屏幕上播放不同的电影(组件),而哪部电影正在播放则取决于电影院的播......
  • 记一个vue2中使用路由时,在同一个页面跳转,但是url参数不同,不会重新渲染页面的问题
    vue2中使用路由时,页面自己跳转自己,但是携带的参数不一样预期想要的结果是:感冒2会跟随着url的参数进行变化,但是并没用 解决方法: 在App.vue这个页面中的router-view添加  :key="$route.fullPath"结果在自己跳转自己之后会刷新页面 达成:参考:https://blog.csdn.ne......
  • vue-element-admin/litemall后端,超过两级嵌套路由无法缓存的问题
    本文主要针对的是litemall后端,vue-element-admin只需稍作修改应该也可以适用。路由扁平的思路主要来源于https://blog.csdn.net/weixin_40119256/article/details/111475571,另外解决面包屑显示问题,此文章作记录以供有需要的同行参考。keep-alive用于缓存不活跃的组件实例,避免重......
  • vue-element-admin关闭标签跳转到前一个标签,而不是最近的标签
    vue-element-admin中关闭标签跳转到前一个标签,而不是最近的标签。场景:先后打开A和B标签,接着从A标签页面内部跳转到C标签(A和C存在紧密关系)。这时如果关闭C标签,默认跳转到最近的B标签而不是A标签。如果A和C中间隔着很多标签,这种场景很难在找回A标签的位置。期望跳转时从A跳转到C处......
  • harmonyos 02 app创建,页面跳转
        HDF             添加button导入 router  返回按钮   指定返回的页面      ......
  • Windows 路由配置(有线通内网,Wi-Fi 通外网)
    Windows路由配置ROUTE命令ROUTE命令基本格式为ROUTE[-f][-p][-4|-6]command[destination][MASKnetmask][gateway][METRICmetric][IFinterface]参数含义:-f:清除路由-p:永久保存-4/-6:指定查看IPv4或IPv6的路由,默认查看全部command:自命令,包括:......
  • Gin路由分组
    Gin路由分组1假设我们需要开发的接口有这些packagemainimport( "net/http" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() r.GET("/",func(c*gin.Context){ c.String(200,"首页") }) r.GET("/news",f......
  • Vue学习计划-Vue3--核心语法(六)路由
    1.路由【对路由的理解】【基本切换效果】Vue3中要使用vue-router的最新版本,目前是4版本路由配置文件代码如下://创建一个路由器,并暴露出去//第一步:引入createRouterimport{createRouter,createWebHistory}from'vue-router'//引入一个一个可能要呈现组件......
  • 如何给shopify的URL做301跳转
    很多shopify的运营者或者推广者由于缺货或者货物变更,又或者自己更换了使用的主题,导致自己的URL结构发生了变化,由于不想浪费掉自己原有URL的流量,就想做个301跳转,让自己新的网址来承接原有的流量。接下来给大家介绍下如何给自己的URL做301跳转。首先你要在后台先访问你的所要修改......
  • 电脑连接家里路由器,ipv6不是公网ip
    1.我用手机流量当热点,笔记本电脑连接手机热点,此时电脑ip是公网ip电脑网络属性如下我用另外一台连接家里路由器的mini主机ping这个ip,是能ping通的此时手机和笔记本是一个网络,路由器和mini主机是一个网络mini主机的cmd命令如下说明笔记本电脑的ipv6是公网ip2.我用笔记本......