使用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 打印内容方法小结
Nov 04 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
javascript写的异步加载js文件函数(支持数组传参)
Jun 07 Javascript
jQuery选择器源码解读(二):select方法
Mar 31 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
WEB前端实现裁剪上传图片功能
Oct 17 Javascript
详解handlebars+require基本使用方法
Dec 21 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
Feb 13 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
Nov 28 Javascript
Vue.js 图标选择组件实践详解
Dec 03 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
如何给phpadmin一个保护
2006/10/09 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
javascript中Object使用详解
2015/01/26 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
js验证账户名是否重复
2020/05/26 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
django-filter和普通查询的例子
2019/08/12 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
家教广告词
2014/03/19 职场文书
团队精神的演讲稿
2014/05/14 职场文书
党员承诺书怎么写
2014/05/20 职场文书
化学教育专业求职信
2014/07/08 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
标准单位租车协议书
2014/09/23 职场文书
影视后期实训报告
2014/11/05 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
MySQL不使用order by实现排名的三种思路总结
2021/06/02 MySQL