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 相关文章推荐
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
Jun 22 Javascript
JavaScript函数获取事件源的小例子
May 14 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
jquery ajax分页插件的简单实现
Jan 27 Javascript
Javascript实现鼠标框选操作  不是点击选取
Apr 14 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 Javascript
JS实现盒子拖拽效果
Feb 06 Javascript
jQuery实现穿梭框效果
Jan 19 jQuery
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中的加密功能
2006/10/09 PHP
新版PHP极大的增强功能和性能
2006/10/09 PHP
php在线打包程序源码
2008/07/27 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php字符串按照单词进行反转的方法
2015/03/14 PHP
PHP pear安装配置教程
2016/05/14 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
基于node实现websocket协议
2016/04/25 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
意大利男装网店:Vrients
2019/05/02 全球购物
工作中的自我评价如何写好
2013/10/28 职场文书
新品发布会主持词
2014/04/02 职场文书
大学学风建设方案
2014/05/04 职场文书
求职教师自荐书
2014/06/19 职场文书
经营目标管理责任书
2014/07/25 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
《假如》教学反思
2016/02/17 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS