使用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 相关文章推荐
js Html结构转字符串形式显示代码
Nov 15 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
Node.js原生api搭建web服务器的方法步骤
Feb 15 Javascript
详解在HTTPS 项目中使用百度地图 API
Apr 26 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHP 图像尺寸调整代码
2010/05/26 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
js实现简单的验证码
2015/12/25 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python实现分段线性插值
2018/12/17 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
python爬虫 正则表达式解析
2019/09/28 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python 如何在测试中使用 Mock
2021/03/01 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
文秘自荐信
2013/10/20 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
暑期研修感言
2014/02/17 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
PyTorch的Debug指南
2021/05/07 Python