react-mobile-datepicker学习和进阶(包括修改分…
2018-06-24 01:02:15来源:未知 阅读 ()
这是小弟第一次写博客,不接受差评!!!
首先说明下,react-mobile-datepicker是一个很好用的兼容移动端的日期时间控件,功能相当强大,具体用法不多说,可自行度娘,这里讲一下进阶篇。
一.设置分钟间隔段
因为项目需求,分钟要求可选要间隔5分钟。本来想过换个控件,但是并不是那么好找的,于是决定改造一下原来的控件。在react-mobile-datepicker.js里,主要修改下面一段
1 function nextMinute(now) { 2 var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 3 4 throwIfInvalidDate(now); 5 //添加下面这段 6 var d = new Date(now.getTime()); 7 var minute = d.getMinutes(); 8 var m = Math.ceil(minute / 5) * 5; 9 m = m + index * 5; 10 11 var date = new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), m, d.getSeconds()); 12 return date; 13 }
因为比较偷懒,项目只要求间隔5分钟,所以没有弄成可配置,如果想自由设置间隔数,与上面的思路是一致的。效果图如下:
二.设置时间可选事件段
上面那个刚改好,甲方又来需求了,“那个我们想限制可选时间段。”没办法,改呗。
控件本身并没有参数设置最大和最小时间,所以自定义了2个参数:
ModalDatePicker.defaultProps = { isPopup: true, isOpen: false, theme: 'default', value: new Date(), min: new Date(1970, 0, 1), max: new Date(2050, 0, 1), showHeader: true, dateFormat: ['YYYY', 'M', 'D'], showFormat: 'YYYY/MM/DD', confirmText: '完成', cancelText: '取消', onSelect: function onSelect() { }, onCancel: function onCancel() { }, //这是添加的参数 minTime: [0, 0], maxTime: [23, 59] };
数组第一位是小时,第二位是分钟。然后修改下面几个部分:
{ key: '_moveToNext', value: function _moveToNext(direction) { var date = this.state.dates[MIDDLE_INDEX]; var _props = this.props, max = _props.max, min = _props.min, minTime = _props.minTime, maxTime = _props.maxTime; if (direction === -1 && date.getTime() < min.getTime()) { this._updateDates(1); } else if (direction === 1 && date.getTime() > max.getTime()) { this._updateDates(-1); } //超出限制时间禁止滑动 if (direction === -1 && (date.getHours() < minTime[0] || (date.getHours() == minTime[0] && date.getMinutes() < minTime[1]))) { this._updateDates(1); } else if (direction === 1 && (date.getHours() > maxTime[0] || (date.getHours() == maxTime[0] && date.getMinutes() > maxTime[1]))) { this._updateDates(-1); } this._moveTo(this.refs.scroll, this.currentIndex); }
{ key: 'handleMove', value: function handleMove(event) { var touchY = !isUndefined(event.targetTouches) && !isUndefined(event.targetTouches[0]) ? event.targetTouches[0].pageY : event.pageY; var dir = touchY - this.touchY; var translateY = this.translateY + dir; var direction = dir > 0 ? -1 : 1; // 日期最小值,最大值限制 var date = this.state.dates[MIDDLE_INDEX]; var _props2 = this.props, max = _props2.max, min = _props2.min, minTime = _props2.minTime, maxTime = _props2.maxTime; if (date.getTime() < min.getTime() || date.getTime() > max.getTime()) { return; } //超出时间直接过 if ((date.getHours() < minTime[0] || (date.getHours() == minTime[0] && date.getMinutes() < minTime[1])) || (date.getHours() > maxTime[0] || (date.getHours() == maxTime[0] && date.getMinutes() > maxTime[1]))) { return; } // 检测是否更新日期列表 if (this._checkIsUpdateDates(direction, translateY)) { this._updateDates(direction); } this.setState({ translateY: translateY }); } }
{ key: 'renderDatepickerItem', value: function renderDatepickerItem(date, index) { var minTime = this.props.minTime, maxTime = this.props.maxTime; var className = date < this.props.min || date > this.props.max ? 'disabled' : ''; //禁选的时间设置样式 className = (date.getHours() < minTime[0] || (date.getHours() == minTime[0] && date.getMinutes() < minTime[1])) || (date.getHours() > maxTime[0] || (date.getHours() == maxTime[0] && date.getMinutes() > maxTime[1])) ? 'disabled' : ''; return React__default.createElement( 'li', { key: index, className: className }, convertDate(date, this.props.format) ); } }
效果图如下,我设置是的10:30-22:30
以上就是个人的学习之路,本来想上传一个修改好的压缩包,但是貌似没有上传附件的地方。。。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:正则表达式的基础问题
- 如何用javascript连接access数据库 2020-03-20
- 在JavaScript中尽可能使用局部变量的原因 2020-03-08
- JsEasy的介绍 2019-10-25
- DEFER的使用方法 2019-10-25
- JavaScript事件的基本学习 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash