首页 > 其他分享 >vue路由切换滑动效果 vue页面跳转交互 vue实现动画跳转

vue路由切换滑动效果 vue页面跳转交互 vue实现动画跳转

时间:2024-04-24 20:56:07浏览次数:17  
标签:index vue enter leave slide meta 跳转 active 路由

Hello,大家好,我是小编鹏仔,鹏仔一直觉得VUE在H5端路由跳转时交互特别丑,一直想写成那种点击滑动切换类的效果,趁着这两天工作不是很忙就网上搜了下,最终在多个搜索结果中选择了一种方式实现,效果如下图所示,点击路由跳转时是页面是滑动切换。

逻辑其实还是很简单的,就是监听在路由切换时加css效果即可,下方跟着鹏仔来一步一步的去添加实现吧!

首先,我们在router.js中,给每个要切换的路由meta中加index索引,用来判断页面动画的方向(页面在返回或者跳转判断向右滑动还是向左滑动方向,简单理解为上下页区分吧)。

{
    path: '/feedbackList',
    name: 'feedbackList',
    component: () => import('../views/teacher/feedbackList/index'),
    meta:{
      title: "反馈列表",
      index: 1
    }
  },
  {
    path: '/feedbackRecordList',
    name: 'feedbackRecordList',
    component: () => import('../views/teacher/feedbackList/record'),
    meta:{
      title: "记录列表",
      index: 2
    }
  },
  {
    path: '/feedbackRecordDetails',
    name: 'feedbackRecordDetails',
    component: () => import('../views/teacher/feedbackList/details'),
    meta:{
      title: "记录详情",
      index: 3
    }
  }

 

接着,我们打开 App.vue 页面

<router-view />

修改为

<transition :name="transitionName">
  <router-view />
</transition>

 

在data中定义

data() {
  return {
    transitionName: "",
  };
}

 

在watch中监听路由跳转时修改name

watch:{
  $route(to,from){
    //实现路由跳转动画
    if (to.meta.index > from.meta.index)  
      this.transitionName = "slide-left";
    if (to.meta.index < from.meta.index)
      this.transitionName = "slide-right";
  }
}

 

最后在css中添加样式,即可实现

.slide-right-enter-active,.slide-right-leave-active,.slide-left-enter-active,.slide-left-leave-active {
  will-change: transform;
  transition: all .5s;
  position: absolute;
}
.slide-right-enter {
  opacity: 0;
  transform: translate(-100%);
}
.slide-right-leave-active {
  opacity: 0;
  transform: translateX(100%);
}
.slide-left-enter {
  opacity: 0;
  transform: translateX(100%);
}
.slide-left-leave-active {
  opacity: 0;
  transform: translateX(-100%);
}

 

这个切换是使用了css的位移属性,如果您时间够闲,可以改为 渐变 旋转 缩放 等花里胡哨的效果(https://www.sharedbk.com/post/131.html)。

 

下方为完整的App.vue页面的代码

<template>
  <div id="app">
    <transition :name="transitionName">
      <router-view />
    </transition>
  </div>
</template>

<script>
export default {
  name: 'App',
  data() {
    return {
      transitionName: "",
    };
  },
  methods: {
  },
  components: {
  },
  watch:{
    $route(to,from){
      //实现路由跳转动画
      if (to.meta.index > from.meta.index)  
        this.transitionName = "slide-left";
      if (to.meta.index < from.meta.index)
        this.transitionName = "slide-right";
    }
  }
}
</script>

<style>
#app {
  height: 100%;
  min-height: 100%;
}
/* 路由页面跳转交互 */
.slide-right-enter-active,.slide-right-leave-active,.slide-left-enter-active,.slide-left-leave-active {
  will-change: transform;
  transition: all .5s;
  position: absolute;
}
.slide-right-enter {
  opacity: 0;
  transform: translate(-100%);
}
.slide-right-leave-active {
  opacity: 0;
  transform: translateX(100%);
}
.slide-left-enter {
  opacity: 0;
  transform: translateX(100%);
}
.slide-left-leave-active {
  opacity: 0;
  transform: translateX(-100%);
}
</style>

 

鹏仔扩展

<transition name=""></transition>

v-enter:进入(显示)开始时的状态

v-enter-active:进入(显示)过程中的状态

v-enter-to:进入(显示)结束时的状态

v-leave:离开(隐藏)开始时的状态

v-leave-active:离开(隐藏)过程中的状态

v-leave-to:离开(隐藏)结束时的状态

标签:index,vue,enter,leave,slide,meta,跳转,active,路由
From: https://www.cnblogs.com/tp1996/p/18156328

相关文章

  • vue启动本地服务不显示network访问链接
    在vue.config.js(或者配置config了的,就在config下的index.js)文件下设置devServer或者dev中的public属性值,需要修改为自己电脑的IPV4地址,获取IPV4地址方法,Win+R打开运行窗口,输入cmd,在命令行输入ipconfig回车后会出现一串信息,复制IPV4地址即可;module.exports={......
  • 2024-04-24 vue2知识点小结
    Vue实例的创建和基本使用方法:使用newVue()创建一个Vue实例。传入一个包含选项的对象,如data、methods、computed、watch等。使用el选项来指定Vue实例挂载的元素。数据绑定:双向数据绑定:使用v-model指令实现表单元素与数据的双向绑定。单向数据绑定:使用v......
  • Vue--POST请求和GET请求
    1、POST请求(POST请求原则上都要传参数,下面介绍两种传参数的方法)1.1POST请求传参方法1--字典类型参数Vue前端代码<template><formclass="form-inlinepanel-body"id="formData"><div><label>账号</label><inpu......
  • 01-初始Vue
    官网https://cn.vuejs.org/MVVM架构MVVM是Model-View-ViewModel的缩写,它是一种基于前端开发的架构模式,是一种事件驱动编程方式Model:vue对象的data属性里面的数据,这里的数据要显示到页面中View:vue中数据要显示的HTML页面,在vue中,也称之为“视图模板”(HTML+CSS)ViewModel:v......
  • vue 省市区三级联动插件
    首先是官网地址https://www.npmjs.com/package/element-china-area-data?activeTab=readme其次是个人应用vue部分<el-cascadersize="large":options="options"v-model="selectedOptions"></el-cascade......
  • Vue项目报错,点击浏览器报错信息定位不到报错代码,该如何优雅地调试代码?
    一、背景通过vue-cli服务运行项目,项目运行一切正常。但打包后,通过nginx部署运行,大屏展示模块报echartstypeError错误。但是点击浏览器报错信息,定位到的位置代码根本看不懂。经过一番寻找,发现打包时,webpack配置产生源码的属性为false。这样就会导致,打包后代码经过压缩加密,出现报......
  • vue3大屏适配
    1、定义初始化比例letstyle=ref({//定义默认比例width:1920,height:1080,transform:"scaleY(1)scaleX(1)translate(-50%,-50%)"})2、获取屏幕的宽高比列对象letgetScale=()=>{//获取屏幕的宽高比列constw=window.innerWidth/style.va......
  • [Vue3+Element-Plus]点击列表中的图片预览时,图片被表格覆盖
    preview-teleported="true" <el-table-columnprop="id"label="ID"width="80"align="center"sortable/><el-table-columnlabel="商品图片"width="85px"><template#default=&q......
  • 串口服务器可以直接连接工业路由器吗
    串口服务器可以直接连接工业路由器吗在工业物联网的架构中,串口服务器和工业路由器都是不可或缺的重要组件。串口服务器的主要功能是将串口通信转换为网络通信,实现数据的远程传输和管理;而工业路由器则负责在工业环境中提供稳定、可靠的网络连接,确保数据的顺畅传输。那么,串口服务器......
  • Vue-cli 将px转化为rem适配移动端
    vue-cli2版本配置1.下载lib-flexible我使用的是vue-cli+webpack,所以是通过npm来安装的npmilib-flexible--save2.引入lib-flexible在main.js中引入lib-flexibleimport'lib-flexible/flexible'3.设置meta标签通过meta标签,设置设备宽度以及缩放比例<metaname="viewport......