使用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将数据库中的TEXT类型数据动态赋值到TEXTAREA中
Apr 20 Javascript
DWZ刷新dialog解决方法
Mar 03 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
juery框架写的弹窗效果适合新手
Nov 27 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
JavaScript知识点整理
Dec 09 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
Jul 06 Javascript
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
微信小程序关键字变色实现代码实例
Dec 13 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
Cappuccino 卡布其诺咖啡之制作
2021/03/03 冲泡冲煮
php 获取远程网页内容的函数
2009/09/08 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
在pycharm中显示python画的图方法
2019/08/31 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
外科实习自我鉴定
2013/10/06 职场文书
教师申诉制度
2014/01/29 职场文书
银行优秀员工事迹
2014/02/06 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书