Vue无限滑动周选择日期的组件的示例代码


Posted in Javascript onJuly 18, 2018

之前在做一个手机端项目的时候,需要一个左右滑动(按周滑动)选择日期插件,而且当时这个项目没有用到Vue。当时又没有找到合适的第三方插件,就花了点时间用原生JavaScript写了出来,当时心中就想把它写成基于Vue的组件,这短时间闲了把它弄出来了!,在这个过程中遇到了一个坑,后面会提出来!

先看效果

Vue无限滑动周选择日期的组件的示例代码

 思路

根据用户传入日期(不传默认今天),获取上一周,当周,下一周对应的日期放数组dates里

let vm = this
  this.dates.push(
   {
    date: moment(vm.defaultDate).subtract(7, 'd').format('YYYY-MM-DD'),
   },
   {
    date: vm.defaultDate,
   },
   {
    date: moment(vm.defaultDate).add(7, 'd').format('YYYY-MM-DD'),
   }
  )

根据datas 生成每一周对应的日期

getDaies (date) {
   let vm = this,
    arr = []
   let weekOfDate = Number(moment(date).format('E'))
   let weeks = ['日', '一', '二', '三', '四', '五', '六']
   let today = moment()
   let defaultDay = moment(vm.defaultDate)
   for (var i = 0; i < 7; i++) {
    let _theDate = moment(date).subtract(weekOfDate - i, 'd')
    arr.push({
     date: _theDate.format('YYYY-MM-DD'),
     week: weeks[i],
     isToday: _theDate.format('YYYY-MM-DD') === today.format('YYYY-MM-DD'),
     isDay: _theDate.format('E') === defaultDay.format('E')
    })
   }
   return arr
  }

生成每一个滑动单元的style

getTransform (index) {
   let vm = this
   let style = {}
   if (index === vm.activeIndex) {
    style['transform'] = 'translateX('+ vm.distan.x +'px)'
   }
   if (index < vm.activeIndex) {
    style['transform'] = 'translateX(-100%)'
   }
   if (index > vm.activeIndex) {
    style['transform'] = 'translateX(100%)'
   }
   style['transition'] = vm.isAnimation ? 'transform 0.5s ease-out' : 'transform 0s ease-out'
   return style
  }

然后就是处理touchstart touchend touchmove事件了,这里就不贴代码了,说下逻辑:

  • ouchstart 记录滑动起点位置
  • touchmove 获得滑动距离赋值给 vm.distan.x 实时获得当前周transform
  • touchend 改变activeIndex的值,当然改变activeIndex的值是不够的,要实现无限滑动,就要在操作一下dates,如果是左滑删除dates的第一个元素并且往dates里面push下下周对应日期,如果是右滑删除最后一个元素并网数组前面unshift上上周对应的日期

坑点

因为这个组件是通过css3的transition来实现动画的,最开始我是把所用三个滑动元素在css里面写了transition:transform 0.5s ease-out; 谁知道自己把自己坑了,因为最后我们改变activeIndex后要删除一个日期,还要往数组里面新增一个元素,这样就会引起dates的改变,进而引起Vue去重新更新界面,导致动画又出来了!最后想到的解决办法就是引入一个变量isAnimation来控制transition的值,只有当滑动的时才开启过度动画效果,再侦听transitionend时间重置isAnimation = false后再更新dates

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

Javascript 相关文章推荐
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
js 删除数组的几种方法小结
Feb 21 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
Css3制作变形与动画效果
Jul 24 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
javascript计算对象长度的方法
Oct 25 Javascript
vue购物车插件编写代码
Nov 27 Javascript
使用layer弹窗和layui表单实现新增功能
Aug 09 Javascript
详解webpack 热更新优化
Sep 13 Javascript
微信小程序修改swiper默认指示器样式的实例代码
Jul 18 #Javascript
webpack4.x打包过程详解
Jul 18 #Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 #Javascript
Vue隐藏显示、只读实例代码
Jul 18 #Javascript
详解vue中axios的封装
Jul 18 #Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 #Javascript
微信小程序将字符串生成二维码图片的操作方法
Jul 17 #Javascript
You might like
杏林同学录(一)
2006/10/09 PHP
function.inc.php超越php
2006/12/09 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
php获取url参数方法总结
2014/11/13 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
JS常用算法实现代码
2016/11/14 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
bootstrap table实例详解
2017/01/06 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
Python语言描述最大连续子序列和
2017/12/05 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
理论讲解python多进程并发编程
2018/02/09 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python 装饰器重要在哪
2021/02/14 Python
《难忘的泼水节》教学反思
2014/02/27 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
2014年销售部工作总结
2014/12/01 职场文书
英文自荐信范文
2015/03/25 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书