使用vue-router切换页面时实现设置过渡动画


Posted in Javascript onOctober 31, 2019

背景

今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要实现类似于原生app的那种切换页面时的特效,遂开始google,发现网上各种方案都是各有优缺点,于是整理了自认为优雅的方案并记录下来.

实现难点

如何判断切换路由时是前进还是后退

每次切换时向左向右切换动画如何实现

解决方案

我们需要给各个页面定义层级,在切换路由时判断用户是进入哪一层页面,如果用户进入更高层级那么做前进动画,如果用户退到低层级那么做后退动画.

router/index.js

import VueRouter from 'vue-router'
import Home from '../components/home/home'
import User from '../components/user/user'

var router = new VueRouter({
  routes:[{
    name:'test',
    path:'/',
    meta:{index:0},//meta对象的index用来定义当前路由的层级,由小到大,由低到高
    component:{
      template:'<div>test</div>'
    }
  },{
    name:'home',
    path:'/home',
    meta:{index:1},
    component:Home
  },{
    name:'user',
    path:'/user/:id',
    meta:{index:2},
    component:User
  }]
});

监控路由跳转,判断切换页面之间的层级关系,并以此来判断路由前进或者后退.

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

<script>
export default {
 name: 'App',
 data(){
   return {
     transitionName:''
   }
 },
 watch: {//使用watch 监听$router的变化
  $route(to, from) {
   //如果to索引大于from索引,判断为前进状态,反之则为后退状态
   if(to.meta.index > from.meta.index){
   //设置动画名称
    this.transitionName = 'slide-left';
   }else{
    this.transitionName = 'slide-right';
   }
  }
 }
}
</script>

编写slide-left 和 slide-right 类的动画

.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
 will-change: transform;
 transition: all 500ms;
 position: absolute;
}
.slide-right-enter {
 opacity: 0;
 transform: translate3d(-100%, 0, 0);
}
.slide-right-leave-active {
 opacity: 0;
 transform: translate3d(100%, 0, 0);
}
.slide-left-enter {
 opacity: 0;
 transform: translate3d(100%, 0, 0);
}
.slide-left-leave-active {
 opacity: 0;
 transform: translate3d(-100%, 0, 0);
}

示例

CSDN markdown 禁用了iframe, 有翻墙工具的可以点击codesandbox demo.

以上这篇使用vue-router切换页面时实现设置过渡动画就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中的startWith和endWith的几种实现方法
May 07 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
JQuery中$(document)是什么意思有什么作用
Jul 21 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
Jquery动态添加输入框的方法
May 29 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
node实现基于token的身份验证
Apr 09 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 #Javascript
vue弹出框组件封装实例代码
Oct 31 #Javascript
使用zrender.js绘制体温单效果
Oct 31 #Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 #Javascript
selenium+java中用js来完成日期的修改
Oct 31 #Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 #Javascript
vue项目出现页面空白的解决方案
Oct 31 #Javascript
You might like
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
三好学生自我鉴定
2013/12/17 职场文书
财政局长自荐信范文
2013/12/22 职场文书
《泉水》教学反思
2014/04/11 职场文书
培训研修方案
2014/06/06 职场文书
节约能源标语
2014/06/17 职场文书
优秀团队申报材料
2014/12/26 职场文书
导游词之凤凰古城
2019/10/22 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python