Vue路由切换时的左滑和右滑效果示例


Posted in Javascript onMay 29, 2018

如何实现Vue路由切换时的左滑和右滑效果,因为原作者ustbhuangyi老师的两个慕课项目中都没有这样的效果,于是突发奇想要做这个功能,看了看QQ、微信都没这样的效果,最后发现SegmentFault(思否) 和掘金两个app都有这样的效果,就以此为参考开始做了。

transition

首先看看官网 淡入淡出动画的例子:

<div id="demo">
 <button v-on:click="show = !show">
  Toggle
 </button>
 <transition name="fade">
  <p v-if="show">hello</p>
 </transition>
</div>
new Vue({
 el: '#demo',
 data: {
  show: true
 }
})
.fade-enter-active, .fade-leave-active {
 transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
 opacity: 0;
}

左右切换效果

CSS部分

我们要实现的是左右切换的效果,所以要定义两种动画(左滑和右滑)

.transitionBody{
 transition: all 0.15s ease; /*定义动画的时间和过渡效果*/
}

.transitionLeft-enter,
.transitionRight-leave-active {
  -webkit-transform: translate(100%, 0);
  transform: translate(100%, 0); 
   /*当左滑进入右滑进入过渡动画*/
}

.transitionLeft-leave-active,
.transitionRight-enter {
  -webkit-transform: translate(-100%, 0); 
  transform: translate(-100%, 0); 
}

HTML部分

这里的 keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM,我们要把它也包裹在transition标签内,否则页面将重新渲染,切换的动画也会卡顿

<transition :name="transitionName">
  <keep-alive>
      <router-view class="transitionBody"></router-view>
  </keep-alive>
</transition>

JS部分

在Vue组件中,data必须是一个函数,将对象 {transitionName: ‘transitionLeft'} 挂载到Vue实例中,然后我们可以监听路由的 to 和 from 来判断此时应该左滑还是右滑,来动态切换transition的name值。

export default {
 data() {
   return {
    transitionName: 'transitionLeft'
   };
 },
 watch: { 
  '$route' (to, from) { 
   const arr = ['/goods','/ratings','/seller'];
   const compare = arr.indexOf(to.path)>arr.indexOf(from.path);
   this.transitionName = compare ? 'transitionLeft' : 'transitionRight';
  } 
 }  
}

点击链接体验一下: https://zc95.github.io/demo/vue-sell

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP SQL防注入的方法
Dec 25 Javascript
用jQuery扩展自写的 UI导航
Jan 13 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
理解Javascript_05_原型继承原理
Oct 13 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
jQuery 获取兄弟元素的几种不错方法
May 23 Javascript
JavaScript的instanceof运算符学习教程
Jun 08 Javascript
vue插件tab选项卡使用小结
Oct 27 Javascript
详解获取jq ul第一个li定位的四种解决方案
Nov 23 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
Vue的生命周期一起来看看
Feb 24 Vue.js
Vue 组件传值几种常用方法【总结】
May 28 #Javascript
讲解vue-router之命名路由和命名视图
May 28 #Javascript
微信小程序实现图片上传功能
May 28 #Javascript
微信小程序上传图片功能(附后端代码)
Jun 19 #Javascript
讲解vue-router之什么是编程式路由
May 28 #Javascript
讲解vue-router之什么是嵌套路由
May 28 #Javascript
微信小程序上传图片实例
May 28 #Javascript
You might like
几种显示数据的方法的比较
2006/10/09 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
jQuery操作cookie
2016/08/08 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
详谈JS中数组的迭代方法和归并方法
2017/08/11 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
python实现批量注册网站用户的示例
2019/02/22 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
护理自荐信范文
2013/10/05 职场文书
区三好学生主要事迹
2014/01/30 职场文书
体育馆的标语
2014/06/24 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
承诺保证书格式
2015/02/28 职场文书
导游词之河北邯郸
2019/09/12 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL