;(function (undefined) { var _global; //工具函数 //配置合并 function extend (def,opt,override) { for(var k in opt){ if(opt.hasOwnProperty(k) && (!def.hasOwnProperty(k) || override)){ def[k] = opt[k] } } return def; } //日期格式化 function formartDate (y,m,d,symbol) { symbol = symbol || '-'; m = (m.toString())[1] ? m : '0'+m; d = (d.toString())[1] ? d : '0'+d; return y+symbol+m+symbol+d } function Schedule (opt) { var def = {}, opt = extend(def,opt,true), curDate = opt.date ? new Date(opt.date) : new Date(), year = curDate.getFullYear(), month = curDate.getMonth(), day = curDate.getDate(), currentYear = curDate.getFullYear(), currentMonth = curDate.getMonth(), currentDay = curDate.getDate(), selectedDate = '', el = document.querySelector(opt.el) || document.querySelector('body'), _this = this; var bindEvent = function (){ el.addEventListener('click',function(e){ switch (e.target.id) { case 'nextMonth': _this.nextMonthFun(); break; case 'nextYear': _this.nextYearFun(); break; case 'prevMonth': _this.prevMonthFun(); break; case 'prevYear': _this.prevYearFun(); break; default: break; }; if(e.target.className.indexOf('currentDate') > -1){ opt.clickCb && opt.clickCb(year, month+1, e.target.innerHTML); selectedDate = e.target.title; day = e.target.innerHTML; render(); } },false) } var init = function () { var scheduleHd = '
'+ '
'+ ''+ ''+ '
'+ '
'+formartDate(year,month+1,day,'-')+'
'+ '
'+ ''+ ''+ '
'+ '
' var scheduleWeek = '' var scheduleBd = ''; el.innerHTML = scheduleHd + scheduleWeek + scheduleBd; bindEvent(); render(); } var render = function () { var fullDay = new Date(year,month+1,0).getDate(), //当月总天数 startWeek = new Date(year,month,1).getDay(), //当月第一天是周几 total = (fullDay+startWeek)%7 == 0 ? (fullDay+startWeek) : fullDay+startWeek+(7-(fullDay+startWeek)%7),//元素总个数 lastMonthDay = new Date(year,month,0).getDate(), //上月最后一天 eleTemp = []; for(var i = 0; i < total; i++){ if(i'+(lastMonthDay-startWeek+1+i)+'') }else if(i<(startWeek+fullDay)){ var nowDate = formartDate(year,month+1,(i+1-startWeek),'-'); var addClass = ''; selectedDate == nowDate && (addClass = 'selected-style'); formartDate(currentYear,currentMonth+1,currentDay,'-') == nowDate && (addClass = 'today-flag'); eleTemp.push('
  • '+(i+1-startWeek)+'
  • ') }else{ eleTemp.push('
  • '+(i+1-(startWeek+fullDay))+'
  • ') } } el.querySelector('.schedule-bd').innerHTML = eleTemp.join(''); el.querySelector('.today').innerHTML = formartDate(year,month+1,day,'-'); }; this.nextMonthFun = function () { if(month+1 > 11){ year += 1; month = 0; }else{ month += 1; } render(); opt.nextMonthCb && opt.nextMonthCb(year,month+1,day); }, this.nextYearFun = function () { year += 1; render(); opt.nextYeayCb && opt.nextYeayCb(year,month+1,day); }, this.prevMonthFun = function () { if(month-1 < 0){ year -= 1; month = 11; }else{ month -= 1; } render(); opt.prevMonthCb && opt.prevMonthCb(year,month+1,day); }, this.prevYearFun = function () { year -= 1; render(); opt.prevYearCb && opt.prevYearCb(year,month+1,day); } init(); } //将插件暴露给全局对象 _global = (function(){return this || (0,eval)('this')}()); if(typeof module !== 'undefined' && module.exports){ module.exports = Schedule; }else if (typeof define === "function" && define.amd){ define(function () { return Schedule; }) }else { !('Schedule' in _global) && (_global.Schedule = Schedule); } }());