UNPKG

hg-datepicker

Version:

a datepicker in the mobile terminal

1 lines 18.2 kB
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.DatePicker=e():t.DatePicker=e()}(window,(function(){return function(t){var e={};function i(s){if(e[s])return e[s].exports;var h=e[s]={i:s,l:!1,exports:{}};return t[s].call(h.exports,h,h.exports,i),h.l=!0,h.exports}return i.m=t,i.c=e,i.d=function(t,e,s){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:s})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var s=Object.create(null);if(i.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var h in t)i.d(s,h,function(e){return t[e]}.bind(null,h));return s},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=0)}([function(t,e,i){"use strict";function s(t){return document.getElementById(t)}function h(t,e,i){for(var s=t.children,h=0;h<s.length;h++)s[h].style[e]=i}function n(t,e){for(var i=[],s=t;s<=e;s++)i.push(s);return i}function a(t){return(t<10?"0":"")+t}function r(t){return t instanceof Array&&t.every((function(t){return"number"==typeof t||void 0===t}))}function l(t,e){if(t instanceof Array&&e instanceof Array){var i=t.length>e.length?t.length:e.length;return Array(i).fill(1).every((function(i,s){return t[s]===e[s]}))}return!1}function o(t){throw Error("[Error in hg-datepicker]: "+t)}function u(t){r(t)||o("设置的 value 不合法");var e=null,i=null,s=null;switch(this.type){case"date":t[0]&&t[1]&&t[2]||o("设置的 value 不完整"),e=new Date(this.start[0],this.start[1]-1,this.start[2]).getTime(),i=new Date(this.end[0],this.end[1]-1,this.end[2]).getTime(),s=new Date(t[0],t[1]-1,t[2]).getTime();break;case"month":t[0]&&t[1]||o("设置的 value 不完整"),e=new Date(this.start[0],this.start[1]-1).getTime(),i=new Date(this.end[0],this.end[1]-1).getTime(),s=new Date(t[0],t[1]-1).getTime();break;case"time":t[3]&&t[4]||o("设置的 value 不完整");var h=this.start[3]+a(this.start[4]);e=parseInt(h);var n=this.end[3]+a(this.end[4]);i=parseInt(n);var l=t[3]+a(t[4]);s=parseInt(l);break;case"dateTime":t[0]&&t[1]&&t[2]&&t[3]&&t[4]||o("设置的 value 不完整"),e=new Date(this.start[0],this.start[1]-1,this.start[2],this.start[3],this.start[4]).getTime(),i=new Date(this.end[0],this.end[1]-1,this.end[2],this.end[3],this.end[4]).getTime(),s=new Date(t[0],t[1]-1,t[2],t[3],t[4]).getTime()}s>i&&o("设置的 value 不能大于结束时间"),s<e&&o("设置的 value 不能小于开始时间")}i.r(e),i.d(e,"default",(function(){return w}));var d=function(){this.onOk||o("配置项 onOk 不能为空."),"yes"!==this.hasSuffix&&"no"!==this.hasSuffix&&o("配置项 hasSuffix 不合法."),"yes"!==this.hasZero&&"no"!==this.hasZero&&o("配置项 hasZero 不合法."),"time"!==this.type&&"dateTime"!==this.type&&"month"!==this.type&&"date"!==this.type&&o("配置项 type 不合法."),r(this.start)||o("配置项 start 不合法"),r(this.end)||o("配置项 end 不合法"),r(this.initValue)||o("配置项 initValue 不合法");var t=null,e=null,i=null;switch(this.type){case"date":this.start[0]&&this.start[1]&&this.start[2]||o("配置项 start 不完整"),this.end[0]&&this.end[1]&&this.end[2]||o("配置项 end 不完整"),this.initValue[0]&&this.initValue[1]&&this.initValue[2]||o("配置项 initValue 不完整"),t=new Date(this.start[0],this.start[1]-1,this.start[2]).getTime(),e=new Date(this.end[0],this.end[1]-1,this.end[2]).getTime(),i=new Date(this.initValue[0],this.initValue[1]-1,this.initValue[2]).getTime(),t>e&&o("开始时间不能大于结束时间."),i>e&&(this.initValue=this.end),i<t&&(this.initValue=this.start);break;case"month":this.start[0]&&this.start[1]||o("配置项 start 不完整"),this.end[0]&&this.end[1]||o("配置项 end 不完整"),this.initValue[0]&&this.initValue[1]||o("配置项 initValue 不完整"),t=new Date(this.start[0],this.start[1]-1).getTime(),e=new Date(this.end[0],this.end[1]-1).getTime(),i=new Date(this.initValue[0],this.initValue[1]-1).getTime(),t>e&&o("开始时间不能大于结束时间."),i>e&&(this.initValue=this.end),i<t&&(this.initValue=this.start);break;case"time":this.start[3]&&this.start[4]||o("配置项 start 不完整"),this.end[3]&&this.end[4]||o("配置项 end 不完整"),this.initValue[3]&&this.initValue[4]||o("配置项 initValue 不完整");var s=this.start[3]+a(this.start[4]);t=parseInt(s);var h=this.end[3]+a(this.end[4]);e=parseInt(h);var n=this.initValue[3]+a(this.initValue[4]);i=parseInt(n),t>e&&o("开始时间不能大于结束时间."),i>e&&(this.initValue=this.end),i<t&&(this.initValue=this.start);break;case"dateTime":this.start[0]&&this.start[1]&&this.start[2]&&this.start[3]&&this.start[4]||o("配置项 start 不完整"),this.end[0]&&this.end[1]&&this.end[2]&&this.end[3]&&this.end[4]||o("配置项 end 不完整"),this.initValue[0]&&this.initValue[1]&&this.initValue[2]&&this.initValue[3]&&this.initValue[4]||o("配置项 initValue 不完整"),t=new Date(this.start[0],this.start[1]-1,this.start[2],this.start[3],this.start[4]).getTime(),e=new Date(this.end[0],this.end[1]-1,this.end[2],this.end[3],this.end[4]).getTime(),i=new Date(this.initValue[0],this.initValue[1]-1,this.initValue[2],this.initValue[3],this.initValue[4]).getTime(),t>e&&o("开始时间不能大于结束时间."),i>e&&(this.initValue=this.end),i<t&&(this.initValue=this.start)}};function c(){switch(this.type){case"date":this.maps=[this.yearMap,this.monthMap,this.dayMap];break;case"month":this.maps=[this.yearMap,this.monthMap];break;case"time":this.maps=[void 0,void 0,void 0,this.hourMap,this.minuteMap];break;case"dateTime":this.maps=[this.yearMap,this.monthMap,this.dayMap,this.hourMap,this.minuteMap];break;default:o("配置项 type 不合法")}}var g=function(){var t;this.previousTime=[],this.yearMap=[],this.monthMap=[],this.dayMap=[],this.dayNumArr=[31,28,31,30,31,30,31,31,30,31,30,31],this.hourMap=[],this.minuteMap=[],this.maps=[],this.dateIndex=[],this.suffix="yes"===this.hasSuffix?["年","月","日","时","分"]:["","","","",""],this.wrapId=(t=(new Date).getTime(),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var i=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"===e?i:7&i|8).toString(16)}))+"-wrap"),this.ulCount=0,this.liHeight=this.style&&this.style.liHeight?this.style.liHeight:40,this.btnHeight=this.style&&this.style.btnHeight?this.style.btnHeight:44,this.dateUl=[],this.liCount=[],this.curDis=[],this.curPos=[],this.startY=0,this.startTime=0,this.endTime=0,this.moveY=0,this.moveTime=0,this.moveNumber=1,this.moveSpeed=[],this.abled=!0,this.containerId=this.wrapId+"-container",this.boxId=this.wrapId+"-box",this.contentId=this.wrapId+"-content",this.cancelId=this.wrapId+"-cancel",this.okId=this.wrapId+"-ok",this.titleId=this.wrapId+"-title";for(var e=0;e<this.initValue.length;e++)this.previousTime.push(this.initValue[e]),this.initValue[e]&&(this.calculateMap(e),this.calculateDis(e),this.ulCount++);c.call(this),this.liCount=this.maps.map((function(t){return t&&t.length}))};function p(){if(this.style){var t=this.style,e=s(this.containerId),i=s(this.contentId),n=s(this.boxId),a=s(this.okId),r=s(this.cancelId),l=i.children.length;if(40!==t.liHeight){for(var o=0;o<this.ulCount;o++)h(i.children[o],"height",this.liHeight+"px");i.children[l-3].style.height=2*this.liHeight+"px",i.children[l-2].style.height=2*this.liHeight+"px",i.children[l-1].style.height=this.liHeight+"px",i.children[l-1].style.top=2*this.liHeight+"px",i.style.height=5*this.liHeight+"px",i.style.lineHeight=this.liHeight+"px"}44!==t.btnHeight&&(n.style.height=this.btnHeight+"px",n.style.lineHeight=this.btnHeight+"px"),t.btnOffset&&(a.style.marginRight=t.btnOffset,r.style.marginLeft=t.btnOffset),40===t.liHeight&&44===t.btnHeight||(e.style.height=5*this.liHeight+this.btnHeight+"px"),t.titleColor&&(n.style.color=t.titleColor),t.okColor&&(a.style.color=t.okColor),t.cancelColor&&(r.style.color=t.cancelColor),t.btnBgColor&&(n.style.backgroundColor=t.btnBgColor),t.contentColor&&(i.style.color=t.contentColor),t.contentBgColor&&(i.style.backgroundColor=t.contentBgColor),t.upShadowColor&&(i.children[l-3].style.backgroundImage=t.upShadowColor),t.downShadowColor&&(i.children[l-2].style.backgroundImage=t.downShadowColor),t.lineColor&&(i.children[l-1].style.borderColor=t.lineColor)}}var m=function(){var t=document.createElement("div");t.id=this.wrapId,document.body.appendChild(t),this.wrap=s(this.wrapId),this.wrap.classList.add("hg-picker-bg");for(var e=this.maps.length,i='<div class="hg-picker-btn-box" id="'+this.boxId+'"><div class="hg-picker-btn" id="'+this.cancelId+'">'+this.cancelText+'</div><div class="hg-picker-btn" id="'+this.okId+'">'+this.okText+'</div><span id="'+this.titleId+'" >'+this.title+"</span> </div>",h="",n=0;n<e;n++)void 0!==this.maps[n]&&(h+='<ul id="'+this.wrapId+"-ul-"+n+'"></ul>');var a='<div class="hg-picker-content" id="'+this.contentId+'">'+h+'<div class="hg-picker-up-shadow"></div><div class="hg-picker-down-shadow"></div><div class="hg-picker-line"></div></div>',r="";r=this.style&&"bottom"===this.style.btnLocation?'<div class="hg-picker-container" id="'+this.containerId+'">'+a+i+"</div>":'<div class="hg-picker-container" id="'+this.containerId+'">'+i+a+"</div>",this.wrap.innerHTML=r;for(var l=0;l<e;l++)void 0!==this.maps[l]&&(this.dateUl[l]=s(this.wrapId+"-ul-"+l),this.dateUl[l].style.width=(100/this.ulCount).toFixed(2)+"%",this.renderLi(l));p.call(this);for(var o=0;o<this.maps.length;o++)this.maps[o]&&this.roll(o)};function f(t){var e,i,s=window.event;switch(s.preventDefault(),s.type){case"touchstart":if(this.startTime=Date.now(),this.startTime-this.endTime<200)return void(this.abled=!1);this.abled=!0,this.startY=s.touches[0].clientY,this.curPos[t]=this.curDis[t],this.previousTime[t]=this.getCurDate(t),this.moveNumber=1,this.moveSpeed=[];break;case"touchmove":if(!this.abled)return;s.preventDefault(),this.moveY=s.touches[0].clientY;var h=this.startY-this.moveY;this.moveTime=Date.now(),this.curDis[t]=this.curPos[t]-h,this.curDis[t]>=1.5*this.liHeight&&(this.curDis[t]=1.5*this.liHeight),this.curDis[t]<=-1*(this.liCount[t]-1+1.5)*this.liHeight&&(this.curDis[t]=-1*(this.liCount[t]-1+1.5)*this.liHeight),this.roll(t),this.moveTime-this.startTime>=130*this.moveNumber&&(this.moveNumber++,this.moveSpeed.push(h/(this.moveTime-this.startTime)));break;case"touchend":if(!this.abled)return;this.endTime=Date.now();var n=null;n=1===this.moveNumber?(this.startY-s.changedTouches[0].clientY)/(this.endTime-this.startTime):this.moveSpeed[this.moveSpeed.length-1],this.curDis[t]=this.curDis[t]-(e=n,i=this.a,Math.abs(e)<.25?0:e/Math.abs(e)*(.5*e*e/i)),this.fixate(t),this.roll(t,.2);for(var a=t;a<this.maps.length-1;a++)this.maps[a+1]&&this.changeDate(a+1);this.previousTime[t]=this.getCurDate(t)}}var v=function(){var t=this;this.container=s(this.containerId),s(this.okId).addEventListener("click",(function(){t.onOk(t.getResult()),t.hide()})),s(this.cancelId).addEventListener("click",(function(){t.onCancel&&t.onCancel(),t.hide()})),this.wrap.addEventListener("click",(function(e){e.target.id===t.wrapId&&t.wrap.classList.contains("hg-picker-bg-show")&&(t.onCancel&&t.onCancel(),t.hide())})),this.dateUl.forEach((function(e,i){e&&(e.addEventListener("touchstart",(function(){f.call(t,i)}),!1),e.addEventListener("touchmove",(function(){f.call(t,i)}),!1),e.addEventListener("touchend",(function(){f.call(t,i)}),!0))}))},D=Symbol("property"),w=function(){function t(t){this.type=t.type||"date",this.title=t.title||"",this.okText=t.okText||"确定",this.cancelText=t.cancelText||"取消","time"===this.type?(t.start?(t.start.length<2&&o("配置项 start 不完整"),this.start=[void 0,void 0,void 0,t.start[0],t.start[1]]):this.start=[void 0,void 0,void 0,0,0],t.end?(t.end.length<2&&o("配置项 end 不完整"),this.end=[void 0,void 0,void 0,t.end[0],t.end[1]]):this.end=[void 0,void 0,void 0,23,59],t.initValue?(t.initValue.length<2&&o("配置项 initValue 不完整"),this.initValue=[void 0,void 0,void 0,t.initValue[0],t.initValue[1]]):this.initValue=[void 0,void 0,void 0,(new Date).getHours(),(new Date).getMinutes()]):"dateTime"===this.type?(this.start=t.start||[(new Date).getFullYear()-4,(new Date).getMonth()+1,(new Date).getDate(),(new Date).getHours(),(new Date).getMinutes()],this.end=t.end||[(new Date).getFullYear()+4,(new Date).getMonth()+1,(new Date).getDate(),(new Date).getHours(),(new Date).getMinutes()],this.initValue=t.initValue||[(new Date).getFullYear(),(new Date).getMonth()+1,(new Date).getDate(),(new Date).getHours(),(new Date).getMinutes()]):"month"===this.type?(this.start=t.start||[(new Date).getFullYear()-4,(new Date).getMonth()+1],this.end=t.end||[(new Date).getFullYear()+4,(new Date).getMonth()+1],this.initValue=t.initValue||[(new Date).getFullYear(),(new Date).getMonth()+1]):(this.start=t.start||[(new Date).getFullYear()-4,(new Date).getMonth()+1,(new Date).getDate()],this.end=t.end||[(new Date).getFullYear()+4,(new Date).getMonth()+1,(new Date).getDate()],this.initValue=t.initValue||[(new Date).getFullYear(),(new Date).getMonth()+1,(new Date).getDate()]),this.a=t.a||.001,this.style=t.style,this.hasSuffix=t.hasSuffix||"yes",this.hasZero=t.hasZero||"yes",this.onOk=t.onOk,this.onCancel=t.onCancel||null,this.beforeShow=t.beforeShow||null,this[D]={},d.call(this),g.call(this),m.call(this),v.call(this)}var e=t.prototype;return e.calculateMap=function(t){var e,i=null,s=null,h=null;switch(t){case 0:this.yearMap=n(this.start[0],this.end[0]);break;case 1:this.monthMap=[],this.start[t-1]===this.end[t-1]?this.monthMap=n(this.start[t],this.end[t]):this.getCurDate(t-1)===this.start[t-1]?this.monthMap=n(this.start[t],12):this.getCurDate(t-1)===this.end[t-1]?this.monthMap=n(1,this.end[t]):this.monthMap=n(1,12);break;case 2:this.dayMap=[],e=this.getCurDate(0),this.dayNumArr[1]=e%4==0&&e%100!=0||e%400==0?29:28,i=new Date(this.getCurDate(0),this.getCurDate(1)-1).getTime(),s=new Date(this.start[0],this.start[1]-1).getTime(),h=new Date(this.end[0],this.end[1]-1).getTime(),this.dayMap=s===h?n(this.start[2],this.end[2]):i===s?n(this.start[2],this.dayNumArr[this.getCurDate(1)-1]):n(1,i===h?this.end[2]:this.dayNumArr[this.getCurDate(1)-1]);break;case 3:"dateTime"===this.type?(i=new Date(this.getCurDate(0),this.getCurDate(1)-1,this.getCurDate(2)).getTime(),s=new Date(this.start[0],this.start[1]-1,this.start[2]).getTime(),h=new Date(this.end[0],this.end[1]-1,this.end[2]).getTime(),this.hourMap=s===h?n(this.start[t],this.end[t]):i===s?n(this.start[t],23):n(0,i===h?this.end[t]:23)):this.hourMap=n(this.start[t],this.end[t]);break;case 4:"dateTime"===this.type?(i=new Date(this.getCurDate(0),this.getCurDate(1)-1,this.getCurDate(2),this.getCurDate(3)).getTime(),s=new Date(this.start[0],this.start[1]-1,this.start[2],this.start[3]).getTime(),h=new Date(this.end[0],this.end[1]-1,this.end[2],this.end[3]).getTime(),this.minuteMap=s===h?n(this.start[t],this.end[t]):i===s?n(this.start[t],59):n(0,i===h?this.end[t]:59)):this.start[t-1]===this.end[t-1]?this.minuteMap=n(this.start[t],this.end[t]):this.getCurDate(t-1)===this.start[t-1]?this.minuteMap=n(this.start[t],59):this.getCurDate(t-1)===this.end[t-1]?this.minuteMap=n(0,this.end[t]):this.minuteMap=n(0,59)}},e.getCurMap=function(t){return{0:this.yearMap,1:this.monthMap,2:this.dayMap,3:this.hourMap,4:this.minuteMap}[t]},e.getCurDate=function(t){return 0===this.maps.length?this.initValue[t]:void 0===this.maps[t]?void 0:this.maps[t][this.dateIndex[t]]},e.calculateDis=function(t){var e=this.getCurMap(t);if(this.previousTime[t]>e[e.length-1])this.dateIndex[t]=e.length-1;else if(this.previousTime[t]<e[0])this.dateIndex[t]=0;else for(var i=0;i<e.length;i++)if(e[i]===this.previousTime[t]){this.dateIndex[t]=i;break}this.curDis[t]=-1*this.liHeight*this.dateIndex[t]},e.renderLi=function(t){var e=this;this.dateUl[t].innerHTML="";var i="<li></li><li></li>";this.maps[t].forEach((function(s){s=e.addZero(s),i+="<li>"+s+e.suffix[t]+"</li>"})),i+="<li></li><li></li>",this.dateUl[t].innerHTML=i,40!==this.liHeight&&h(this.dateUl[t],"height",this.liHeight+"px")},e.roll=function(t,e){(this.curDis[t]||0===this.curDis[t])&&(this.dateUl[t].style.transform="translate3d(0, "+this.curDis[t]+"px, 0)",this.dateUl[t].style.webkitTransform="translate3d(0, "+this.curDis[t]+"px, 0)",e&&(this.dateUl[t].style.transition="transform "+e+"s ease-out",this.dateUl[t].style.webkitTransition="-webkit-transform "+e+"s ease-out"))},e.fixate=function(t){this.curDis[t]<=-1*(this.liCount[t]-1)*this.liHeight?this.dateIndex[t]=this.liCount[t]-1:this.curDis[t]>=0?this.dateIndex[t]=0:this.dateIndex[t]=-1*Math.round(this.curDis[t]/this.liHeight),this.curDis[t]=-1*this.liHeight*this.dateIndex[t]},e.changeDate=function(t){this.calculateMap(t),this.maps[t]=this.getCurMap(t),this.calculateDis(t),this.liCount[t]=this.maps[t].length,this.renderLi(t),this.roll(t)},e.addZero=function(t){return"yes"===this.hasZero&&t<10&&(t="0"+t),t},e.show=function(){this.wrap.classList.add("hg-picker-bg-show"),this.container.classList.add("hg-picker-container-up")},e.hide=function(){this.wrap.classList.remove("hg-picker-bg-show"),this.container.classList.remove("hg-picker-container-up")},e.set=function(t){for(var e=0,i=Object.entries(t);e<i.length;e++){var h=i[e],n=h[0],a=h[1];if(/^(title|cancelText|okText|a|onOk|onCancel)$/.test(n))this[n]=a,"title"===n?s(this.titleId).innerHTML=a:"okText"===n?s(this.okId).innerHTML=a:"cancelText"===n&&(s(this.cancelId).innerHTML=a);else if(/^(value)$/.test(n)){if(u.call(this,a),l(a,this.get(n)))return;this.previousTime=a;for(var r=0;r<a.length;r++)a[r]&&this.changeDate(r)}else this[D][n]=a}return this},e.get=function(t){return/^(title|cancelText|okText|a|onOk|onCancel)$/.test(t)?this[t]:/^(value)$/.test(t)?this.getResult():this[D][t]},e.getResult=function(){for(var t=[],e=0;e<this.maps.length;e++)this.maps[e]&&t.push(this.maps[e][this.dateIndex[e]]);return t},e.destroy=function(){s(this.wrapId).remove()},t}()}]).default}));