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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
常见JS效果之图片减速度滚动实现代码
Dec 08 Javascript
JS定义回车事件(实现代码)
Jul 08 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
解析prototype,JQuery中跳出each循环的方法
Dec 12 Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
AngularJS执行流程详解
Feb 17 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
Aug 27 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 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
Terran剧情介绍
2020/03/14 星际争霸
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
JS 继承实例分析
2008/11/04 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python编写分类决策树的代码
2017/12/21 Python
20个常用Python运维库和模块
2018/02/12 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
python 为什么说eval要慎用
2019/03/26 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
python 瀑布线指标编写实例
2020/06/03 Python
python操作toml文件的示例代码
2020/11/27 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
入党转预备思想汇报
2014/01/07 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
装饰活动策划方案
2014/02/11 职场文书
大学生英文求职信范文
2015/03/19 职场文书
聘用合同范本
2015/09/21 职场文书