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 相关文章推荐
简单实用的js调试logger组件实现代码
Nov 20 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
AngularJs表单验证实例详解
May 30 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
JavaScript 实现 Tab 点击切换实例代码
Mar 25 Javascript
Webpack性能优化 DLL 用法详解
Aug 10 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
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
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
js自带函数备忘 数组
2006/12/29 Javascript
js 解决“options为空或不是对象”
2008/12/22 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python实现数字炸弹游戏
2020/07/17 Python
python定义具名元组实例操作
2021/02/28 Python
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
放飞理想主题班会
2015/08/14 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
Redis主从复制操作和配置详情
2022/09/23 Redis