datePicker.js 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974
  1. //datePicker日期控件 v1.0
  2. // var calendar = new datePicker();
  3. // calendar.init({
  4. // 'trigger': '#demo1', /*选择器,触发弹出插件*/
  5. // 'type': 'date',/*date 调出日期选择 datetime 调出日期时间选择 time 调出时间选择 ym 调出年月选择*/
  6. // 'minDate':'1900-1-1',/*最小日期*/
  7. // 'maxDate':new Date().getFullYear()+'-'+(new Date().getMonth()+1)+'-'+new Date().getDate(),/*最大日期*/
  8. // 'onSubmit':function(){/*确认时触发事件*/
  9. // var theSelectData=calendar.value;
  10. // },
  11. // 'onClose':function(){/*取消时触发事件*/
  12. // }
  13. // });
  14. window.datePicker = (function() {
  15. var MobileCalendar = function() {
  16. this.gearDate;
  17. this.minY = 1900;
  18. this.minM = 1;
  19. this.minD = 1;
  20. this.maxY = 2099;
  21. this.maxM = 12;
  22. this.maxD = 31;
  23. this.value="";
  24. };
  25. var cssHtm='.gearYM,.gearDate,.gearDatetime,.gearTime{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:10px;background-color:rgba(0,0,0,0.2);display:block;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9900;overflow:hidden;-webkit-animation-fill-mode:both;animation-fill-mode:both}.date_ctrl{vertical-align:middle;background-color:#d5d8df;color:#000;margin:0;height:auto;width:100%;position:absolute;left:0;bottom:0;z-index:9901;overflow:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slideInUp{animation:slideInUp .3s ease;-webkit-animation:slideInUp .3s ease;}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.ym_roll,.date_roll,.datetime_roll,.time_roll{display:-webkit-box;width:100%;height:auto;overflow:hidden;font-weight:bold;background-color:transparent;-webkit-mask:-webkit-gradient(linear,0% 50%,0% 100%,from(#debb47),to(rgba(36,142,36,0)));-webkit-mask:-webkit-linear-gradient(top,#debb47 50%,rgba(36,142,36,0))}.ym_roll>div,.date_roll>div,.datetime_roll>div,.time_roll>div{font-size:2.3em;height:6em;float:left;background-color:transparent;position:relative;overflow:hidden;-webkit-box-flex:4}.ym_roll>div .gear,.date_roll>div .gear,.datetime_roll>div .gear,.time_roll>div .gear{width:100%;float:left;position:absolute;z-index:9902;margin-top:-6em}.date_roll_mask{-webkit-mask:-webkit-gradient(linear,0% 40%,0% 0%,from(#debb47),to(rgba(36,142,36,0)));-webkit-mask:-webkit-linear-gradient(bottom,#debb47 50%,rgba(36,142,36,0));padding:0 0 3em 0}.date_roll>div:nth-child(2){-webkit-box-flex:2}.date_roll>div:nth-child(1),.datetime_roll>div:nth-child(1){-webkit-box-flex:4}.datetime_roll>div:first-child{-webkit-box-flex:6}.datetime_roll>div:last-child{-webkit-box-flex:6}.date_grid{position:relative;top:2em;width:100%;height:2em;margin:0;box-sizing:border-box;z-index:0;border-top:1px solid #abaeb5;border-bottom:1px solid #abaeb5}.date_grid>div{color:#000;position:absolute;right:0;top:0;font-size:.8em;line-height:2.5em}.date_roll>div:nth-child(3) .date_grid>div{left:42%}.datetime_roll>div .date_grid>div{right:0}.datetime_roll>div:first-child .date_grid>div{left:auto;right:0%}.datetime_roll>div:last-child .date_grid>div{left:50%}.time_roll>div:nth-child(1) .date_grid>div{right:1em}.ym_roll>div:nth-child(1) .date_grid>div{right:.1em}.ym_roll>div .date_grid>div,.time_roll>div .date_grid>div{right:5em}.date_btn{color:#0575f2;font-size:1.6em;font-weight:bold;line-height:1em;text-align:center;padding:.8em 1em}.date_btn_box:before,.date_btn_box:after{content:"";position:absolute;height:1px;width:100%;display:block;background-color:#96979b;z-index:15;-webkit-transform:scaleY(0.33);transform:scaleY(0.33)}.date_btn_box{display:-webkit-box;-webkit-box-pack:justify;-webkit-box-align:stretch;background-color:#f1f2f4;position:relative}.date_btn_box:before{left:0;top:0;-webkit-transform-origin:50% 20%;transform-origin:50% 20%}.date_btn_box:after{left:0;bottom:0;-webkit-transform-origin:50% 70%;transform-origin:50% 70%}.date_roll>div:nth-child(1) .gear{text-indent:20%}.date_roll>div:nth-child(2) .gear{text-indent:-20%}.date_roll>div:nth-child(3) .gear{text-indent:-55%}.datetime_roll>div .gear{width:100%;text-indent:-25%}.datetime_roll>div:first-child .gear{text-indent:-10%}.datetime_roll>div:last-child .gear{text-indent:-50%}.ym_roll>div .gear,.time_roll>div .gear{width:100%;text-indent:-70%}.ym_roll>div:nth-child(1) .gear,.time_roll>div:nth-child(1) .gear{width:100%;text-indent:10%}.tooth{height:2em;line-height:2em;text-align:center}';
  26. var cssEle = document.createElement("style");
  27. cssEle.type = "text/css";
  28. cssEle.appendChild(document.createTextNode(cssHtm));
  29. document.getElementsByTagName("head")[0].appendChild(cssEle);
  30. MobileCalendar.prototype = {
  31. init: function(params) {
  32. this.type = params.type;
  33. this.trigger = document.querySelector(params.trigger);
  34. if (this.trigger.getAttribute("data-lcalendar") != null) {
  35. var arr = this.trigger.getAttribute("data-lcalendar").split(',');
  36. var minArr = arr[0].split('-');
  37. this.minY = ~~minArr[0];
  38. this.minM = ~~minArr[1];
  39. this.minD = ~~minArr[2];
  40. var maxArr = arr[1].split('-');
  41. this.maxY = ~~maxArr[0];
  42. this.maxM = ~~maxArr[1];
  43. this.maxD = ~~maxArr[2];
  44. };
  45. if (params.minDate) {
  46. var minArr = params.minDate.split('-');
  47. this.minY = ~~minArr[0];
  48. this.minM = ~~minArr[1];
  49. this.minD = ~~minArr[2];
  50. };
  51. if (params.maxDate) {
  52. var maxArr = params.maxDate.split('-');
  53. this.maxY = ~~maxArr[0];
  54. this.maxM = ~~maxArr[1];
  55. this.maxD = ~~maxArr[2];
  56. };
  57. this.onClose= params.onClose;
  58. this.onSubmit= params.onSubmit;
  59. this.onChange= params.onChange;
  60. this.bindEvent(this.type);
  61. },
  62. bindEvent: function(type) {
  63. var _self = this;
  64. var isTouched = false , isMoved = false;
  65. var pree;
  66. //呼出日期插件
  67. function popupDate(e) {
  68. _self.gearDate = document.createElement("div");
  69. _self.gearDate.className = "gearDate";
  70. _self.gearDate.innerHTML = '<div class="date_ctrl slideInUp">' +
  71. '<div class="date_btn_box">' +
  72. '<div class="date_btn lcalendar_cancel">取消</div>' +
  73. '<div class="date_btn lcalendar_finish">确定</div>' +
  74. '</div>' +
  75. '<div class="date_roll_mask">' +
  76. '<div class="date_roll">' +
  77. '<div>' +
  78. '<div class="gear date_yy" data-datetype="date_yy"></div>' +
  79. '<div class="date_grid">' +
  80. '<div>年</div>' +
  81. '</div>' +
  82. '</div>' +
  83. '<div>' +
  84. '<div class="gear date_mm" data-datetype="date_mm"></div>' +
  85. '<div class="date_grid">' +
  86. '<div>月</div>' +
  87. '</div>' +
  88. '</div>' +
  89. '<div>' +
  90. '<div class="gear date_dd" data-datetype="date_dd"></div>' +
  91. '<div class="date_grid">' +
  92. '<div>日</div>' +
  93. '</div>' +
  94. '</div>' +
  95. '</div>' +
  96. '</div>' +
  97. '</div><div class="date_bg" style="width:100%;height:100%;"></div>';
  98. document.body.appendChild(_self.gearDate);
  99. dateCtrlInit();
  100. var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel");
  101. lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar);
  102. var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish");
  103. lcalendar_finish.addEventListener('touchstart', finishMobileDate);
  104. var lcalendar_bg = _self.gearDate.querySelector(".date_bg");
  105. lcalendar_bg.addEventListener('click', closeMobileCalendar);
  106. var date_yy = _self.gearDate.querySelector(".date_yy");
  107. var date_mm = _self.gearDate.querySelector(".date_mm");
  108. var date_dd = _self.gearDate.querySelector(".date_dd");
  109. date_yy.addEventListener('touchstart', gearTouchStart);
  110. date_mm.addEventListener('touchstart', gearTouchStart);
  111. date_dd.addEventListener('touchstart', gearTouchStart);
  112. date_yy.addEventListener('touchmove', gearTouchMove);
  113. date_mm.addEventListener('touchmove', gearTouchMove);
  114. date_dd.addEventListener('touchmove', gearTouchMove);
  115. date_yy.addEventListener('touchend', gearTouchEnd);
  116. date_mm.addEventListener('touchend', gearTouchEnd);
  117. date_dd.addEventListener('touchend', gearTouchEnd);
  118. //-------------------------------------------------------------
  119. lcalendar_cancel.addEventListener('click', closeMobileCalendar);
  120. lcalendar_finish.addEventListener('click', finishMobileDate);
  121. date_yy.addEventListener('mousedown', gearTouchStart);
  122. date_mm.addEventListener('mousedown', gearTouchStart);
  123. date_dd.addEventListener('mousedown', gearTouchStart);
  124. date_yy.addEventListener('mousemove', gearTouchMove);
  125. date_mm.addEventListener('mousemove', gearTouchMove);
  126. date_dd.addEventListener('mousemove', gearTouchMove);
  127. date_yy.addEventListener('mouseup', gearTouchEnd);
  128. date_mm.addEventListener('mouseup', gearTouchEnd);
  129. date_dd.addEventListener('mouseup', gearTouchEnd);
  130. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseleave', gearTouchOut);
  131. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseup', gearTouchOut);
  132. }
  133. //初始化年月日插件默认值
  134. function dateCtrlInit() {
  135. var date = new Date();
  136. var dateArr = {
  137. yy: date.getYear(),
  138. mm: date.getMonth(),
  139. dd: date.getDate() - 1
  140. };
  141. if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(_self.trigger.value)) {
  142. /*rs = _self.trigger.value.match(/(^|-)\d{1,4}/g);
  143. dateArr.yy = rs[0] - _self.minY;
  144. dateArr.mm = rs[1].replace(/-/g, "") - 1;
  145. dateArr.dd = rs[2].replace(/-/g, "") - 1;*/
  146. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  147. } else {
  148. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  149. }
  150. _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy);
  151. _self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm);
  152. _self.gearDate.querySelector(".date_dd").setAttribute("val", dateArr.dd);
  153. setDateGearTooth();
  154. }
  155. //呼出年月插件
  156. function popupYM(e) {
  157. _self.gearDate = document.createElement("div");
  158. _self.gearDate.className = "gearDate";
  159. _self.gearDate.innerHTML = '<div class="date_ctrl slideInUp">' +
  160. '<div class="date_btn_box">' +
  161. '<div class="date_btn lcalendar_cancel">取消</div>' +
  162. '<div class="date_btn lcalendar_finish">确定</div>' +
  163. '</div>' +
  164. '<div class="date_roll_mask">' +
  165. '<div class="ym_roll">' +
  166. '<div>' +
  167. '<div class="gear date_yy" data-datetype="date_yy"></div>' +
  168. '<div class="date_grid">' +
  169. '<div>年</div>' +
  170. '</div>' +
  171. '</div>' +
  172. '<div>' +
  173. '<div class="gear date_mm" data-datetype="date_mm"></div>' +
  174. '<div class="date_grid">' +
  175. '<div>月</div>' +
  176. '</div>' +
  177. '</div>' +
  178. '</div>' +
  179. '</div>' +
  180. '</div><div class="date_bg" style="width:100%;height:100%;"></div>';
  181. document.body.appendChild(_self.gearDate);
  182. ymCtrlInit();
  183. var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel");
  184. lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar);
  185. var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish");
  186. lcalendar_finish.addEventListener('touchstart', finishMobileYM);
  187. var lcalendar_bg = _self.gearDate.querySelector(".date_bg");
  188. lcalendar_bg.addEventListener('click', closeMobileCalendar);
  189. var date_yy = _self.gearDate.querySelector(".date_yy");
  190. var date_mm = _self.gearDate.querySelector(".date_mm");
  191. date_yy.addEventListener('touchstart', gearTouchStart);
  192. date_mm.addEventListener('touchstart', gearTouchStart);
  193. date_yy.addEventListener('touchmove', gearTouchMove);
  194. date_mm.addEventListener('touchmove', gearTouchMove);
  195. date_yy.addEventListener('touchend', gearTouchEnd);
  196. date_mm.addEventListener('touchend', gearTouchEnd);
  197. //-------------------------------------------------------------
  198. lcalendar_cancel.addEventListener('click', closeMobileCalendar);
  199. lcalendar_finish.addEventListener('click', finishMobileYM);
  200. date_yy.addEventListener('mousedown', gearTouchStart);
  201. date_mm.addEventListener('mousedown', gearTouchStart);
  202. date_yy.addEventListener('mousemove', gearTouchMove);
  203. date_mm.addEventListener('mousemove', gearTouchMove);
  204. date_yy.addEventListener('mouseup', gearTouchEnd);
  205. date_mm.addEventListener('mouseup', gearTouchEnd);
  206. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseleave', gearTouchOut);
  207. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseup', gearTouchOut);
  208. }
  209. //初始化年月插件默认值
  210. function ymCtrlInit() {
  211. var date = new Date();
  212. var dateArr = {
  213. yy: date.getYear(),
  214. mm: date.getMonth()
  215. };
  216. if (/^\d{4}-\d{1,2}$/.test(_self.trigger.value)) {
  217. /*rs = _self.trigger.value.match(/(^|-)\d{1,4}/g);
  218. dateArr.yy = rs[0] - _self.minY;
  219. dateArr.mm = rs[1].replace(/-/g, "") - 1;*/
  220. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  221. } else {
  222. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  223. }
  224. _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy);
  225. _self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm);
  226. setDateGearTooth();
  227. }
  228. //呼出年插件
  229. function popupY(e) {
  230. _self.gearDate = document.createElement("div");
  231. _self.gearDate.className = "gearDate";
  232. _self.gearDate.innerHTML = '<div class="date_ctrl slideInUp">' +
  233. '<div class="date_btn_box">' +
  234. '<div class="date_btn lcalendar_cancel">取消</div>' +
  235. '<div class="date_btn lcalendar_finish">确定</div>' +
  236. '</div>' +
  237. '<div class="date_roll_mask">' +
  238. '<div class="ym_roll">' +
  239. '<div>' +
  240. '<div class="gear date_yy" data-datetype="date_yy"></div>' +
  241. '<div class="date_grid">' +
  242. '<div>年</div>' +
  243. '</div>' +
  244. '</div>' +
  245. '</div>' +
  246. '</div>' +
  247. '</div><div class="date_bg" style="width:100%;height:100%;"></div>';
  248. document.body.appendChild(_self.gearDate);
  249. yCtrlInit();
  250. var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel");
  251. lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar);
  252. var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish");
  253. lcalendar_finish.addEventListener('touchstart', finishMobileY);
  254. var lcalendar_bg = _self.gearDate.querySelector(".date_bg");
  255. lcalendar_bg.addEventListener('click', closeMobileCalendar);
  256. var date_yy = _self.gearDate.querySelector(".date_yy");
  257. //var date_mm = _self.gearDate.querySelector(".date_mm");
  258. date_yy.addEventListener('touchstart', gearTouchStart);
  259. //date_mm.addEventListener('touchstart', gearTouchStart);
  260. date_yy.addEventListener('touchmove', gearTouchMove);
  261. //date_mm.addEventListener('touchmove', gearTouchMove);
  262. date_yy.addEventListener('touchend', gearTouchEnd);
  263. //date_mm.addEventListener('touchend', gearTouchEnd);
  264. //-------------------------------------------------------------
  265. lcalendar_cancel.addEventListener('click', closeMobileCalendar);
  266. lcalendar_finish.addEventListener('click', finishMobileY);
  267. date_yy.addEventListener('mousedown', gearTouchStart);
  268. //date_mm.addEventListener('mousedown', gearTouchStart);
  269. date_yy.addEventListener('mousemove', gearTouchMove);
  270. // date_mm.addEventListener('mousemove', gearTouchMove);
  271. date_yy.addEventListener('mouseup', gearTouchEnd);
  272. //date_mm.addEventListener('mouseup', gearTouchEnd);
  273. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseleave', gearTouchOut);
  274. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseup', gearTouchOut);
  275. }
  276. //初始化年插件默认值
  277. function yCtrlInit() {
  278. var date = new Date();
  279. var dateArr = {
  280. yy: date.getYear(),
  281. // mm: date.getMonth()
  282. };
  283. if (/^\d{4}-\d{1,2}$/.test(_self.trigger.value)) {
  284. /*rs = _self.trigger.value.match(/(^|-)\d{1,4}/g);
  285. dateArr.yy = rs[0] - _self.minY;*/
  286. // dateArr.mm = rs[1].replace(/-/g, "") - 1;
  287. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  288. } else {
  289. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  290. }
  291. _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy);
  292. //_self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm);
  293. setDateGearTooth();
  294. }
  295. //呼出日期+时间插件
  296. function popupDateTime(e) {
  297. _self.gearDate = document.createElement("div");
  298. _self.gearDate.className = "gearDatetime";
  299. _self.gearDate.innerHTML = '<div class="date_ctrl slideInUp">' +
  300. '<div class="date_btn_box">' +
  301. '<div class="date_btn lcalendar_cancel">取消</div>' +
  302. '<div class="date_btn lcalendar_finish">确定</div>' +
  303. '</div>' +
  304. '<div class="date_roll_mask">' +
  305. '<div class="datetime_roll">' +
  306. '<div>' +
  307. '<div class="gear date_yy" data-datetype="date_yy"></div>' +
  308. '<div class="date_grid">' +
  309. '<div>年</div>' +
  310. '</div>' +
  311. '</div>' +
  312. '<div>' +
  313. '<div class="gear date_mm" data-datetype="date_mm"></div>' +
  314. '<div class="date_grid">' +
  315. '<div>月</div>' +
  316. '</div>' +
  317. '</div>' +
  318. '<div>' +
  319. '<div class="gear date_dd" data-datetype="date_dd"></div>' +
  320. '<div class="date_grid">' +
  321. '<div>日</div>' +
  322. '</div>' +
  323. '</div>' +
  324. '<div>' +
  325. '<div class="gear time_hh" data-datetype="time_hh"></div>' +
  326. '<div class="date_grid">' +
  327. '<div>时</div>' +
  328. '</div>' +
  329. '</div>' +
  330. '<div>' +
  331. '<div class="gear time_mm" data-datetype="time_mm"></div>' +
  332. '<div class="date_grid">' +
  333. '<div>分</div>' +
  334. '</div>' +
  335. '</div>' +
  336. '</div>' + //date_roll
  337. '</div>' + //date_roll_mask
  338. '</div><div class="date_bg" style="width:100%;height:100%;"></div>';
  339. document.body.appendChild(_self.gearDate);
  340. dateTimeCtrlInit();
  341. var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel");
  342. lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar);
  343. var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish");
  344. lcalendar_finish.addEventListener('touchstart', finishMobileDateTime);
  345. var lcalendar_bg = _self.gearDate.querySelector(".date_bg");
  346. lcalendar_bg.addEventListener('click', closeMobileCalendar);
  347. var date_yy = _self.gearDate.querySelector(".date_yy");
  348. var date_mm = _self.gearDate.querySelector(".date_mm");
  349. var date_dd = _self.gearDate.querySelector(".date_dd");
  350. var time_hh = _self.gearDate.querySelector(".time_hh");
  351. var time_mm = _self.gearDate.querySelector(".time_mm");
  352. date_yy.addEventListener('touchstart', gearTouchStart);
  353. date_mm.addEventListener('touchstart', gearTouchStart);
  354. date_dd.addEventListener('touchstart', gearTouchStart);
  355. time_hh.addEventListener('touchstart', gearTouchStart);
  356. time_mm.addEventListener('touchstart', gearTouchStart);
  357. date_yy.addEventListener('touchmove', gearTouchMove);
  358. date_mm.addEventListener('touchmove', gearTouchMove);
  359. date_dd.addEventListener('touchmove', gearTouchMove);
  360. time_hh.addEventListener('touchmove', gearTouchMove);
  361. time_mm.addEventListener('touchmove', gearTouchMove);
  362. date_yy.addEventListener('touchend', gearTouchEnd);
  363. date_mm.addEventListener('touchend', gearTouchEnd);
  364. date_dd.addEventListener('touchend', gearTouchEnd);
  365. time_hh.addEventListener('touchend', gearTouchEnd);
  366. time_mm.addEventListener('touchend', gearTouchEnd);
  367. //-------------------------------------------------------------
  368. lcalendar_cancel.addEventListener('click', closeMobileCalendar);
  369. lcalendar_finish.addEventListener('click', finishMobileDateTime);
  370. date_yy.addEventListener('mousedown', gearTouchStart);
  371. date_mm.addEventListener('mousedown', gearTouchStart);
  372. date_dd.addEventListener('mousedown', gearTouchStart);
  373. time_hh.addEventListener('mousedown', gearTouchStart);
  374. time_mm.addEventListener('mousedown', gearTouchStart);
  375. date_yy.addEventListener('mousemove', gearTouchMove);
  376. date_mm.addEventListener('mousemove', gearTouchMove);
  377. date_dd.addEventListener('mousemove', gearTouchMove);
  378. time_hh.addEventListener('mousemove', gearTouchMove);
  379. time_mm.addEventListener('mousemove', gearTouchMove);
  380. date_yy.addEventListener('mouseup', gearTouchEnd);
  381. date_mm.addEventListener('mouseup', gearTouchEnd);
  382. date_dd.addEventListener('mouseup', gearTouchEnd);
  383. time_hh.addEventListener('mouseup', gearTouchEnd);
  384. time_mm.addEventListener('mouseup', gearTouchEnd);
  385. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseleave', gearTouchOut);
  386. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseup', gearTouchOut);
  387. }
  388. //初始化年月日时分插件默认值
  389. function dateTimeCtrlInit() {
  390. var date = new Date();
  391. var dateArr = {
  392. yy: date.getYear(),
  393. mm: date.getMonth(),
  394. dd: date.getDate() - 1,
  395. hh: date.getHours(),
  396. mi: date.getMinutes()
  397. };
  398. if (/^\d{4}-\d{1,2}-\d{1,2}\s\d{2}:\d{2}$/.test(_self.trigger.value)) {
  399. /*rs = _self.trigger.value.match(/(^|-|\s|:)\d{1,4}/g);
  400. dateArr.yy = rs[0] - _self.minY;
  401. dateArr.mm = rs[1].replace(/-/g, "") - 1;
  402. dateArr.dd = rs[2].replace(/-/g, "") - 1;
  403. dateArr.hh = parseInt(rs[3].replace(/\s0?/g, ""));
  404. dateArr.mi = parseInt(rs[4].replace(/:0?/g, ""));*/
  405. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  406. } else {
  407. dateArr.yy = dateArr.yy + 1900 - _self.minY;
  408. }
  409. _self.gearDate.querySelector(".date_yy").setAttribute("val", dateArr.yy);
  410. _self.gearDate.querySelector(".date_mm").setAttribute("val", dateArr.mm);
  411. _self.gearDate.querySelector(".date_dd").setAttribute("val", dateArr.dd);
  412. setDateGearTooth();
  413. _self.gearDate.querySelector(".time_hh").setAttribute("val", dateArr.hh);
  414. _self.gearDate.querySelector(".time_mm").setAttribute("val", dateArr.mi);
  415. setTimeGearTooth();
  416. }
  417. //呼出时间插件
  418. function popupTime(e) {
  419. _self.gearDate = document.createElement("div");
  420. _self.gearDate.className = "gearDate";
  421. _self.gearDate.innerHTML = '<div class="date_ctrl slideInUp">' +
  422. '<div class="date_btn_box">' +
  423. '<div class="date_btn lcalendar_cancel">取消</div>' +
  424. '<div class="date_btn lcalendar_finish">确定</div>' +
  425. '</div>' +
  426. '<div class="date_roll_mask">' +
  427. '<div class="time_roll">' +
  428. '<div>' +
  429. '<div class="gear time_hh" data-datetype="time_hh"></div>' +
  430. '<div class="date_grid">' +
  431. '<div>时</div>' +
  432. '</div>' +
  433. '</div>' +
  434. '<div>' +
  435. '<div class="gear time_mm" data-datetype="time_mm"></div>' +
  436. '<div class="date_grid">' +
  437. '<div>分</div>' +
  438. '</div>' +
  439. '</div>' +
  440. '</div>' + //time_roll
  441. '</div>' +
  442. '</div><div class="date_bg" style="width:100%;height:100%;"></div>';
  443. document.body.appendChild(_self.gearDate);
  444. timeCtrlInit();
  445. var lcalendar_cancel = _self.gearDate.querySelector(".lcalendar_cancel");
  446. lcalendar_cancel.addEventListener('touchstart', closeMobileCalendar);
  447. var lcalendar_finish = _self.gearDate.querySelector(".lcalendar_finish");
  448. lcalendar_finish.addEventListener('touchstart', finishMobileTime);
  449. var lcalendar_bg = _self.gearDate.querySelector(".date_bg");
  450. lcalendar_bg.addEventListener('click', closeMobileCalendar);
  451. var time_hh = _self.gearDate.querySelector(".time_hh");
  452. var time_mm = _self.gearDate.querySelector(".time_mm");
  453. time_hh.addEventListener('touchstart', gearTouchStart);
  454. time_mm.addEventListener('touchstart', gearTouchStart);
  455. time_hh.addEventListener('touchmove', gearTouchMove);
  456. time_mm.addEventListener('touchmove', gearTouchMove);
  457. time_hh.addEventListener('touchend', gearTouchEnd);
  458. time_mm.addEventListener('touchend', gearTouchEnd);
  459. //-------------------------------------------------------------
  460. lcalendar_cancel.addEventListener('click', closeMobileCalendar);
  461. lcalendar_finish.addEventListener('click', finishMobileTime);
  462. time_hh.addEventListener('mousedown', gearTouchStart);
  463. time_mm.addEventListener('mousedown', gearTouchStart);
  464. time_hh.addEventListener('mousemove', gearTouchMove);
  465. time_mm.addEventListener('mousemove', gearTouchMove);
  466. time_hh.addEventListener('mouseup', gearTouchEnd);
  467. time_mm.addEventListener('mouseup', gearTouchEnd);
  468. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseleave', gearTouchOut);
  469. _self.gearDate.querySelector(".date_roll_mask").addEventListener('mouseup', gearTouchOut);
  470. }
  471. //初始化时分插件默认值
  472. function timeCtrlInit() {
  473. var d = new Date();
  474. var e = {
  475. hh: d.getHours(),
  476. mm: d.getMinutes()
  477. };
  478. if (/^\d{2}:\d{2}$/.test(_self.trigger.value)) {
  479. rs = _self.trigger.value.match(/(^|:)\d{2}/g);
  480. e.hh = parseInt(rs[0].replace(/^0?/g, ""));
  481. e.mm = parseInt(rs[1].replace(/:0?/g, ""))
  482. }
  483. _self.gearDate.querySelector(".time_hh").setAttribute("val", e.hh);
  484. _self.gearDate.querySelector(".time_mm").setAttribute("val", e.mm);
  485. setTimeGearTooth();
  486. }
  487. //重置日期节点个数
  488. function setDateGearTooth() {
  489. var passY = _self.maxY - _self.minY + 1;
  490. var date_yy = _self.gearDate.querySelector(".date_yy");
  491. var itemStr = "";
  492. if (date_yy && date_yy.getAttribute("val")) {
  493. //得到年份的值
  494. var yyVal = parseInt(date_yy.getAttribute("val"));
  495. //p 当前节点前后需要展示的节点个数
  496. for (var p = 0; p <= passY - 1; p++) {
  497. itemStr += "<div class='tooth'>" + (_self.minY + p) + "</div>";
  498. }
  499. date_yy.innerHTML = itemStr;
  500. var top = Math.floor(parseFloat(date_yy.getAttribute('top')));
  501. if (!isNaN(top)) {
  502. top % 2 == 0 ? (top = top) : (top = top + 1);
  503. top > 8 && (top = 8);
  504. var minTop = 8 - (passY - 1) * 2;
  505. top < minTop && (top = minTop);
  506. date_yy.style["-webkit-transform"] = 'translate3d(0,' + top + 'em,0)';
  507. date_yy.setAttribute('top', top + 'em');
  508. yyVal = Math.abs(top - 8) / 2;
  509. date_yy.setAttribute("val", yyVal);
  510. } else {
  511. date_yy.style["-webkit-transform"] = 'translate3d(0,' + (8 - yyVal * 2) + 'em,0)';
  512. date_yy.setAttribute('top', 8 - yyVal * 2 + 'em');
  513. }
  514. } else {
  515. return;
  516. }
  517. var date_mm = _self.gearDate.querySelector(".date_mm");
  518. if (date_mm && date_mm.getAttribute("val")) {
  519. itemStr = "";
  520. //得到月份的值
  521. var mmVal = parseInt(date_mm.getAttribute("val"));
  522. var maxM = 11;
  523. var minM = 0;
  524. //当年份到达最大值
  525. if (yyVal == passY - 1) {
  526. maxM = _self.maxM - 1;
  527. }
  528. //当年份到达最小值
  529. if (yyVal == 0) {
  530. minM = _self.minM - 1;
  531. }
  532. //p 当前节点前后需要展示的节点个数
  533. for (var p = 0; p < maxM - minM + 1; p++) {
  534. itemStr += "<div class='tooth'>" + (minM + p + 1) + "</div>";
  535. }
  536. date_mm.innerHTML = itemStr;
  537. if (mmVal > maxM) {
  538. mmVal = maxM;
  539. date_mm.setAttribute("val", mmVal);
  540. } else if (mmVal < minM) {
  541. mmVal = maxM;
  542. date_mm.setAttribute("val", mmVal);
  543. }
  544. date_mm.style["-webkit-transform"] = 'translate3d(0,' + (8 - (mmVal - minM) * 2) + 'em,0)';
  545. date_mm.setAttribute('top', 8 - (mmVal - minM) * 2 + 'em');
  546. } else {
  547. return;
  548. }
  549. var date_dd = _self.gearDate.querySelector(".date_dd");
  550. if (date_dd && date_dd.getAttribute("val")) {
  551. itemStr = "";
  552. //得到日期的值
  553. var ddVal = parseInt(date_dd.getAttribute("val"));
  554. //返回月份的天数
  555. var maxMonthDays = calcDays(yyVal, mmVal);
  556. //p 当前节点前后需要展示的节点个数
  557. var maxD = maxMonthDays - 1;
  558. var minD = 0;
  559. //当年份月份到达最大值
  560. if (yyVal == passY - 1 && _self.maxM == mmVal + 1) {
  561. maxD = _self.maxD - 1;
  562. }
  563. //当年、月到达最小值
  564. if (yyVal == 0 && _self.minM == mmVal + 1) {
  565. minD = _self.minD - 1;
  566. }
  567. for (var p = 0; p < maxD - minD + 1; p++) {
  568. itemStr += "<div class='tooth'>" + (minD + p + 1) + "</div>";
  569. }
  570. date_dd.innerHTML = itemStr;
  571. if (ddVal > maxD) {
  572. ddVal = maxD;
  573. date_dd.setAttribute("val", ddVal);
  574. } else if (ddVal < minD) {
  575. ddVal = minD;
  576. date_dd.setAttribute("val", ddVal);
  577. }
  578. date_dd.style["-webkit-transform"] = 'translate3d(0,' + (8 - (ddVal - minD) * 2) + 'em,0)';
  579. date_dd.setAttribute('top', 8 - (ddVal - minD) * 2 + 'em');
  580. } else {
  581. return;
  582. }
  583. }
  584. //重置时间节点个数
  585. function setTimeGearTooth() {
  586. var time_hh = _self.gearDate.querySelector(".time_hh");
  587. if (time_hh && time_hh.getAttribute("val")) {
  588. var i = "";
  589. var hhVal = parseInt(time_hh.getAttribute("val"));
  590. for (var g = 0; g <= 23; g++) {
  591. i += "<div class='tooth'>" + g + "</div>";
  592. }
  593. time_hh.innerHTML = i;
  594. time_hh.style["-webkit-transform"] = 'translate3d(0,' + (8 - hhVal * 2) + 'em,0)';
  595. time_hh.setAttribute('top', 8 - hhVal * 2 + 'em');
  596. } else {
  597. return
  598. }
  599. var time_mm = _self.gearDate.querySelector(".time_mm");
  600. if (time_mm && time_mm.getAttribute("val")) {
  601. var i = "";
  602. var mmVal = parseInt(time_mm.getAttribute("val"));
  603. for (var g = 0; g <= 59; g++) {
  604. i += "<div class='tooth'>" + g + "</div>";
  605. }
  606. time_mm.innerHTML = i;
  607. time_mm.style["-webkit-transform"] = 'translate3d(0,' + (8 - mmVal * 2) + 'em,0)';
  608. time_mm.setAttribute('top', 8 - mmVal * 2 + 'em');
  609. } else {
  610. return
  611. }
  612. }
  613. //求月份最大天数
  614. function calcDays(year, month) {
  615. if (month == 1) {
  616. year += _self.minY;
  617. if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 && year % 4000 != 0)) {
  618. return 29;
  619. } else {
  620. return 28;
  621. }
  622. } else {
  623. if (month == 3 || month == 5 || month == 8 || month == 10) {
  624. return 30;
  625. } else {
  626. return 31;
  627. }
  628. }
  629. }
  630. //触摸开始
  631. function gearTouchStart(e) {
  632. if (isMoved || isTouched) return;
  633. isTouched = true;
  634. e.preventDefault();
  635. var target = e.target;
  636. while (true) {
  637. if (!target.classList.contains("gear")) {
  638. target = target.parentElement;
  639. } else {
  640. break
  641. }
  642. }
  643. clearInterval(target["int_" + target.id]);
  644. target["old_" + target.id] = e.targetTouches ? e.targetTouches[0].screenY : e.pageY;
  645. target["o_t_" + target.id] = (new Date()).getTime();
  646. var top = target.getAttribute('top');
  647. if (top) {
  648. target["o_d_" + target.id] = parseFloat(top.replace(/em/g, ""));
  649. } else {
  650. target["o_d_" + target.id] = 0;
  651. };
  652. pree=e;
  653. }
  654. //手指移动
  655. function gearTouchMove(e) {
  656. if (!isTouched) return;
  657. isMoved = true;
  658. e.preventDefault();
  659. if(pree) var target = pree.target; else
  660. var target = e.target;
  661. while (true) {
  662. if (!target.classList.contains("gear")) {
  663. target = target.parentElement;
  664. } else {
  665. break
  666. }
  667. }
  668. target["new_" + target.id] = e.targetTouches ? e.targetTouches[0].screenY : e.pageY;
  669. target["n_t_" + target.id] = (new Date()).getTime();
  670. //var f = (target["new_" + target.id] - target["old_" + target.id]) * 18 / target.clientHeight;
  671. var f = (target["new_" + target.id] - target["old_" + target.id]) * 18 / 370;
  672. target["pos_" + target.id] = target["o_d_" + target.id] + f;
  673. target.style["-webkit-transform"] = 'translate3d(0,' + target["pos_" + target.id] + 'em,0)';
  674. target.setAttribute('top', target["pos_" + target.id] + 'em');
  675. }
  676. //离开屏幕
  677. function gearTouchEnd(e) {
  678. if (!isTouched || !isMoved) {
  679. isTouched = isMoved = false;
  680. return;
  681. }
  682. isTouched = isMoved = false;
  683. e.preventDefault();
  684. if(pree) var target = pree.target; else
  685. var target = e.target;
  686. while (true) {
  687. if (!target.classList.contains("gear")) {
  688. target = target.parentElement;
  689. } else {
  690. break;
  691. }
  692. }
  693. var flag = (target["new_" + target.id] - target["old_" + target.id]) / (target["n_t_" + target.id] - target["o_t_" + target.id]);
  694. if (Math.abs(flag) <= 0.2) {
  695. target["spd_" + target.id] = (flag < 0 ? -0.08 : 0.08);
  696. } else {
  697. if (Math.abs(flag) <= 0.5) {
  698. target["spd_" + target.id] = (flag < 0 ? -0.16 : 0.16);
  699. } else {
  700. target["spd_" + target.id] = flag / 2;
  701. }
  702. }
  703. if (!target["pos_" + target.id]) {
  704. target["pos_" + target.id] = 0;
  705. }
  706. rollGear(target);
  707. pree=null;
  708. };
  709. //离开区域
  710. function gearTouchOut(e) {
  711. gearTouchEnd(pree);
  712. };
  713. //缓动效果
  714. function rollGear(target) {
  715. var d = 0;
  716. var stopGear = false;
  717. var passY = _self.maxY - _self.minY + 1;
  718. clearInterval(target["int_" + target.id]);
  719. target["int_" + target.id] = setInterval(function() {
  720. var pos = target["pos_" + target.id];
  721. var speed = target["spd_" + target.id] * Math.exp(-0.1 * d);
  722. pos += speed;
  723. if (Math.abs(speed) > 0.1) {} else {
  724. speed = 0.1;
  725. var b = Math.round(pos / 2) * 2;
  726. if (Math.abs(pos - b) < 0.05) {
  727. stopGear = true;
  728. } else {
  729. if (pos > b) {
  730. pos -= speed
  731. } else {
  732. pos += speed
  733. }
  734. }
  735. }
  736. if (pos > 8) {
  737. pos = 8;
  738. stopGear = true;
  739. }
  740. switch (target.dataset.datetype) {
  741. case "date_yy":
  742. var minTop = 8 - (passY - 1) * 2;
  743. if (pos < minTop) {
  744. pos = minTop;
  745. stopGear = true;
  746. }
  747. if (stopGear) {
  748. var gearVal = Math.abs(pos - 8) / 2;
  749. setGear(target, gearVal);
  750. clearInterval(target["int_" + target.id]);
  751. }
  752. break;
  753. case "date_mm":
  754. var date_yy = _self.gearDate.querySelector(".date_yy");
  755. //得到年份的值
  756. var yyVal = parseInt(date_yy.getAttribute("val"));
  757. var maxM = 11;
  758. var minM = 0;
  759. //当年份到达最大值
  760. if (yyVal == passY - 1) {
  761. maxM = _self.maxM - 1;
  762. }
  763. //当年份到达最小值
  764. if (yyVal == 0) {
  765. minM = _self.minM - 1;
  766. }
  767. var minTop = 8 - (maxM - minM) * 2;
  768. if (pos < minTop) {
  769. pos = minTop;
  770. stopGear = true;
  771. }
  772. if (stopGear) {
  773. var gearVal = Math.abs(pos - 8) / 2 + minM;
  774. setGear(target, gearVal);
  775. clearInterval(target["int_" + target.id]);
  776. }
  777. break;
  778. case "date_dd":
  779. var date_yy = _self.gearDate.querySelector(".date_yy");
  780. var date_mm = _self.gearDate.querySelector(".date_mm");
  781. //得到年份的值
  782. var yyVal = parseInt(date_yy.getAttribute("val"));
  783. //得到月份的值
  784. var mmVal = parseInt(date_mm.getAttribute("val"));
  785. //返回月份的天数
  786. var maxMonthDays = calcDays(yyVal, mmVal);
  787. var maxD = maxMonthDays - 1;
  788. var minD = 0;
  789. //当年份月份到达最大值
  790. if (yyVal == passY - 1 && _self.maxM == mmVal + 1) {
  791. maxD = _self.maxD - 1;
  792. }
  793. //当年、月到达最小值
  794. if (yyVal == 0 && _self.minM == mmVal + 1) {
  795. minD = _self.minD - 1;
  796. }
  797. var minTop = 8 - (maxD - minD) * 2;
  798. if (pos < minTop) {
  799. pos = minTop;
  800. stopGear = true;
  801. }
  802. if (stopGear) {
  803. var gearVal = Math.abs(pos - 8) / 2 + minD;
  804. setGear(target, gearVal);
  805. clearInterval(target["int_" + target.id]);
  806. }
  807. break;
  808. case "time_hh":
  809. if (pos < -38) {
  810. pos = -38;
  811. stopGear = true;
  812. }
  813. if (stopGear) {
  814. var gearVal = Math.abs(pos - 8) / 2;
  815. setGear(target, gearVal);
  816. clearInterval(target["int_" + target.id]);
  817. }
  818. break;
  819. case "time_mm":
  820. if (pos < -110) {
  821. pos = -110;
  822. stopGear = true;
  823. }
  824. if (stopGear) {
  825. var gearVal = Math.abs(pos - 8) / 2;
  826. setGear(target, gearVal);
  827. clearInterval(target["int_" + target.id]);
  828. }
  829. break;
  830. default:
  831. }
  832. target["pos_" + target.id] = pos;
  833. target.style["-webkit-transform"] = 'translate3d(0,' + pos + 'em,0)';
  834. target.setAttribute('top', pos + 'em');
  835. d++;
  836. }, 30);
  837. }
  838. //控制插件滚动后停留的值
  839. function setGear(target, val) {
  840. val = Math.round(val);
  841. target.setAttribute("val", val);
  842. if (/date/.test(target.dataset.datetype)) {
  843. setDateGearTooth();
  844. } else {
  845. setTimeGearTooth();
  846. }
  847. }
  848. //取消
  849. function closeMobileCalendar(e) {
  850. e.preventDefault();
  851. isTouched = isMoved = false;
  852. if(_self.onClose) _self.onClose();
  853. var evt = new CustomEvent('input');
  854. _self.trigger.dispatchEvent(evt);
  855. document.body.removeChild(_self.gearDate);
  856. }
  857. //日期确认
  858. function finishMobileDate(e) {
  859. var passY = _self.maxY - _self.minY + 1;
  860. var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val")));
  861. var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1;
  862. date_mm = date_mm > 9 ? date_mm : '0' + date_mm;
  863. var date_dd = parseInt(Math.round(_self.gearDate.querySelector(".date_dd").getAttribute("val"))) + 1;
  864. date_dd = date_dd > 9 ? date_dd : '0' + date_dd;
  865. _self.trigger.value = (date_yy % passY + _self.minY) + "-" + date_mm + "-" + date_dd;
  866. _self.value = _self.trigger.value;
  867. if(_self.onSubmit) _self.onSubmit();
  868. closeMobileCalendar(e);
  869. }
  870. //年月确认
  871. function finishMobileYM(e) {
  872. var passY = _self.maxY - _self.minY + 1;
  873. var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val")));
  874. var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1;
  875. date_mm = date_mm > 9 ? date_mm : '0' + date_mm;
  876. _self.trigger.value = (date_yy % passY + _self.minY) + "-" + date_mm;
  877. _self.value = _self.trigger.value;
  878. if(_self.onSubmit) _self.onSubmit();
  879. closeMobileCalendar(e);
  880. }
  881. //年月确认
  882. function finishMobileY(e) {
  883. var passY = _self.maxY - _self.minY + 1;
  884. var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val")));
  885. //var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1;
  886. //date_mm = date_mm > 9 ? date_mm : '0' + date_mm;
  887. _self.trigger.value = (date_yy % passY + _self.minY) ;
  888. _self.value = _self.trigger.value;
  889. if(_self.onSubmit) _self.onSubmit();
  890. closeMobileCalendar(e);
  891. }
  892. //日期时间确认
  893. function finishMobileDateTime(e) {
  894. var passY = _self.maxY - _self.minY + 1;
  895. var date_yy = parseInt(Math.round(_self.gearDate.querySelector(".date_yy").getAttribute("val")));
  896. var date_mm = parseInt(Math.round(_self.gearDate.querySelector(".date_mm").getAttribute("val"))) + 1;
  897. date_mm = date_mm > 9 ? date_mm : '0' + date_mm;
  898. var date_dd = parseInt(Math.round(_self.gearDate.querySelector(".date_dd").getAttribute("val"))) + 1;
  899. date_dd = date_dd > 9 ? date_dd : '0' + date_dd;
  900. var time_hh = parseInt(Math.round(_self.gearDate.querySelector(".time_hh").getAttribute("val")));
  901. time_hh = time_hh > 9 ? time_hh : '0' + time_hh;
  902. var time_mm = parseInt(Math.round(_self.gearDate.querySelector(".time_mm").getAttribute("val")));
  903. time_mm = time_mm > 9 ? time_mm : '0' + time_mm;
  904. _self.trigger.value = (date_yy % passY + _self.minY) + "-" + date_mm + "-" + date_dd + " " + (time_hh.length < 2 ? "0" : "") + time_hh + (time_mm.length < 2 ? ":0" : ":") + time_mm;
  905. _self.value = _self.trigger.value;
  906. if(_self.onSubmit) _self.onSubmit();
  907. closeMobileCalendar(e);
  908. }
  909. //时间确认
  910. function finishMobileTime(e) {
  911. var time_hh = parseInt(Math.round(_self.gearDate.querySelector(".time_hh").getAttribute("val")));
  912. time_hh = time_hh > 9 ? time_hh : '0' + time_hh;
  913. var time_mm = parseInt(Math.round(_self.gearDate.querySelector(".time_mm").getAttribute("val")));
  914. time_mm = time_mm > 9 ? time_mm : '0' + time_mm;
  915. _self.trigger.value = (time_hh.length < 2 ? "0" : "") + time_hh + (time_mm.length < 2 ? ":0" : ":") + time_mm;
  916. _self.value = _self.trigger.value;
  917. if(_self.onSubmit) _self.onSubmit();
  918. closeMobileCalendar(e);
  919. }
  920. _self.trigger.addEventListener('click', {
  921. "ym": popupYM,
  922. "date": popupDate,
  923. "datetime": popupDateTime,
  924. "time": popupTime,
  925. "year":popupY
  926. }[type]);
  927. }
  928. }
  929. return MobileCalendar;
  930. })();