UNPKG

m-calendar

Version:

这是一个移动端日历选择插件。

8 lines 7.09 kB
/** * Calender 1.0.0 * 移动端日历插件 * QQ: 120929285 * * Created by zhangfeichao on 2017/9/8. */ !function(){"use strict";var a=function(a){function g(a,b,c){var d=window.document.createElement(a);return b=b||"",c=c||"",d.className=b,c&&(d.textContent=c),d}function h(a){var c=i(a,"clender-month-day"),d=i(a,"calender-close");c&&b.choice(c),d&&b.close()}function i(a,b){var c,d,e,f=event.srcElement||a.target,g=f,h=function(a){e=g,d=e.getAttribute?e.getAttribute("class")||"":"",c=d.split(" ");for(var b=0;b<c.length;b++)if(c[b]===a)return e;return g=g.parentNode,null};return h(b)}function j(){var a=b.render.calender;a.classList.remove("calender-none"),a.classList.add("calender-show"),b.render.lockedPosition()}function k(){var a=b.render.calender;a.classList.remove("calender-show"),a.classList.add("calender-none")}var c,f,b=this,d=null,e={week:["日","一","二","三","四","五","六"],close:"取消",title:"选择日期",format:"yyyy-mm-dd",minDate:"",maxDate:"",inDate:"",disable:[],partDate:!1,intervalDay:90,startDate:"",endDate:"",onChange:null,onClose:null};for(f in a)e[f]=a[f];return b.choice=function(a){var c=a.getAttribute("date"),f=function(){setTimeout(function(){k()},100),e.onChange&&e.onChange(b.getDate())};return""===c||b.check.disable(c)?!1:(e.partDate?(d&&b.date.getTime(d)<b.date.getTime(c)?(d=null,f()):(d=c,e.startDate=c),e.endDate=c):(e.inDate=c,f()),b.render.setInDay(),void 0)},b.close=function(){k(),e.onClose&&e.onClose(b.getDate())},b.open=function(){j()},b.setCurrDate=function(a,c){e.partDate?(e.startDate=a,e.endDate=c):e.inDate=a,b.render.setInDay()},b.getDate=function(){return e.partDate?[b.date.format(e.startDate),b.date.format(e.endDate)]:[b.date.format(e.inDate)]},b.date={parse:function(a){if(!a)return new Date;if(!isNaN(a))return new Date(a);if("string"==typeof a){if(a.indexOf("GMT")>0)return new Date(a);var b=a.split(/[^\d]/);return new Date(b[0],b[1]-1||0,b[2]||1)}return new Date},format:function(a,b){var c,d;if(b=b||e.format,a=this.parse(a),a&&"object"==typeof a&&a.getTime){c={"m+":a.getMonth()+1,"d+":a.getDate()},/(y+)/.test(b)&&(b=b.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length)));for(d in c)new RegExp("("+d+")").test(b)&&(b=b.replace(RegExp.$1,1==RegExp.$1.length?c[d]:("00"+c[d]).substr((""+c[d]).length)));return b}return"string"==typeof a?this.format(this.parse(a),b):this.format(new Date,b)},get:function(a){var b=this.parse(a),c=b.getFullYear(),d=b.getMonth()+1,e=b.getDate(),f=function(a){return 10>a?"0"+a:a},g={y:c,m:f(d),d:f(e)};return g},getTime:function(a){return this.parse(a).getTime()},getNumDays:function(a){var b=[31,28,31,30,31,30,31,31,30,31,30,31],c=this.get(a),d=parseInt(c.y),e=parseInt(c.m);return 2===e&&(0===d%4&&0!==d%100||0===d%400)?29:b[e-1]},getInterval:function(a,b,c){var d,e,h,f=new Date,g=new Date;for(a=this.get(a),b=this.get(b),f.setUTCFullYear(a.y,a.m-1,a.d),g.setUTCFullYear(b.y,b.m-1,b.d),d=f.getTime(),e=g.getTime(),h=d;e>=h;)c(this.format(new Date(parseInt(h)))),h+=864e5},getIntervalMonth:function(a,c){var e,d=[];return this.getInterval(a,c,function(a){var c=b.date.get(a);e!==c.m&&(d.push(a.substring(0,7)),e=c.m)}),d},getIntervalDay:function(a,b){var c=[];return this.getInterval(a,b,function(a){c[a]=a}),c},isRest:function(a){var b=this.parse(a).getDay();return 6===b||!b}},b.check={disable:function(a){var c=b.date.getTime(e.minDate),d=b.date.getTime(e.maxDate),f=b.date.getTime(a);return"string"==typeof a&&(c>f||f>d)?!0:void 0},start:function(a){return a===e.startDate&&e.partDate},end:function(a){return a===e.endDate&&e.partDate},isSelected:function(a){var d=e.inDate,f=e.partDate;return f?c[a]:a===b.date.format(d)},isToday:function(a){var c=b.date.getTime(a),d=b.date.getTime(b.date.format(new Date));return c===d},twoDate:function(a,c){var d,e=b.date,f=e.getTime(a),g=e.getTime(c);return d=g>f?{start:e.format(a),end:e.format(c)}:{start:e.format(c),end:e.format(a)}}},b.event={tap:function(a,b){var c="ontouchstart"in window,d=c?"touchstart":"mousedown",f=c?"touchend":"mouseup",g=0,h=200;a.addEventListener(d,function(){g=Date.now()}),a.addEventListener(f,function(a){Date.now()-g>h||b(a)})},bind:function(){this.tap(b.render.calender,h)},init:function(){this.bind()}},b.other={swapExposeDate:function(){var a=b.date,c=1e3*60*60*24*e.intervalDay,d=a.format(a.parse(a.getTime()-c)),f=a.format(a.parse(a.getTime()+c));e.minDate=e.minDate||d,e.maxDate=e.maxDate||f},swapSelectedDate:function(){var a=e.startDate,c=e.endDate,d=b.check.twoDate(a,c);e.partDate&&(e.startDate=d.start,e.endDate=d.end)},init:function(){this.swapExposeDate(),this.swapSelectedDate()}},b.render={calender:g("div","calender"),_groupDay:[],header:function(){var a=g("div","calender-header"),b=g("span","calender-close",e.close),c=g("h3","calender-title",e.title);a.appendChild(c),a.appendChild(b),this.calender.appendChild(a)},week:function(){var c,d,a=window.document.createDocumentFragment(),b=g("div","calender-weeks");for(c=0,d=e.week.length;d>c;c++)a.appendChild(g("span","week week"+c,e.week[c]));b.appendChild(a),this.calender.appendChild(b)},month:function(){function f(a){var j,k,l,m,n,o,p,q,r,s,c=g("div","clender-month-days"),d=b.date.getNumDays(a),e=b.date.parse(a).getDay()-1,f=d+e,h=7-f%7,i=f+h-1;for(j=0;i>=j;j++)r=j%7,l=j-e,n=a.substr(4,1),m=b.date.format(a+n+l),o=b.date.format(m),p=e>j||j>f||0===l,q=b.check.isToday(o),k=g("li","clender-month-day",p?"":q?"今天":l),b.check.disable(p||o)&&k.classList.add("clender-month-disable"),q&&k.classList.add("clender-month-today"),0===r&&(s=g("ul","clender-month-weeks")),b.date.isRest(m)&&k.classList.add("clender-month-rest"),s.appendChild(k),k.setAttribute("date",p?"":o),!p&&b.render._groupDay.push(k),c.appendChild(s);return c}function h(b){var c=g("div","calender-month");c.appendChild(g("div","calender-month-header",b)),c.appendChild(f(b)),c.setAttribute("date",b),a.appendChild(c)}var i,j,a=window.document.createDocumentFragment(),c=g("div","calendar-months"),d=b.date.getIntervalMonth(e.minDate,e.maxDate);for(i=0;i<d.length;i++)j=d[i],h(j);c.appendChild(a),this.calender.appendChild(c)},setInDay:function(){var h,i,j,k,l,a=this._groupDay,d=e.partDate,f=e.startDate,g=e.endDate;for(c=d&&b.date.getIntervalDay(f,g),h=0;h<a.length;h++)i=b.check,j=a[h],k=j.getAttribute("date"),l=function(a,b){a?j.classList.add(b):j.classList.remove(b)},l(i.disable(k),"clender-month-disable"),l(i.isSelected(k),"clender-month-current"),d?(l(i.start(k),"clender-month-start"),l(i.end(k),"clender-month-end")):l(i.isSelected(k),"clender-month-start")},lockedPosition:function(){var a,b,c,d=[],e=this.calender.getElementsByClassName("clender-month-current")[0],f=this.calender.getElementsByClassName("calendar-months")[0],g=function(a){for(c=e;c;){if(b=c.classList)for(var f=0;f<b.length;f++)b[f]===a&&d.push(c);c=c.parentNode}return d};a=g("calender-month")[0],f.scrollTop=a?a.offsetTop:0},init:function(){this.header(),this.week(),this.month(),this.setInDay(),window.document.body.appendChild(this.calender)}},b.init=function(){b.other.init(),b.render.init(),b.event.init()},b.init(),b};window.mCalendar=a}();