使用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 继承详解(三)
Jul 13 Javascript
javascript 正则替换 replace(regExp, function)用法
May 22 Javascript
js动态设置鼠标事件示例代码
Oct 30 Javascript
jQuery动态添加、删除元素的方法
Jan 09 Javascript
ES6的新特性概览
Mar 10 Javascript
基于JS实现无缝滚动思路及代码分享
Jun 07 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
Jun 04 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
浅谈angular.copy() 深拷贝
Sep 14 Javascript
iView框架问题整理小结
Oct 16 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
Sep 02 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 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
php 字符转义 注意事项
2009/05/27 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
javascript常用对话框小集
2013/09/13 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
python实现用于测试网站访问速率的方法
2015/05/26 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
结束运行python的方法
2020/06/16 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
高等教育学自荐书范文
2014/02/10 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
委托公证书
2014/04/08 职场文书
北京故宫的导游词
2015/01/31 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
借钱欠条怎么写
2015/07/03 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
win sever 2022如何占用操作主机角色
2022/06/25 Servers
mysql函数之截取字符串的实现
2022/08/14 MySQL