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 相关文章推荐
Javascript级联下拉菜单以及AJAX数据验证核心代码
May 10 Javascript
node.js中的fs.ftruncate方法使用说明
Dec 15 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
JavaScript实现美化滑块效果
May 17 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
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中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
Python、Javascript中的闭包比较
2015/02/04 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python批量获取html内body内容的实例
2019/01/02 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python之生产者消费者模型实现详解
2019/07/27 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
股权收购意向书
2014/04/01 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
共青团员自我评价范文
2014/09/14 职场文书
退伍军人感言
2015/08/01 职场文书