/** * Created by davedavehong on 2016-11-19. */ (function($){$.fn.datePicker=function(options){return this.each(function(e){var that=$(this),docType=$(this).is("input"),nowdate=new Date(),yearScroll=null,monthScroll=null,dayScroll=null,hourScroll=null,minuteScroll=null,initY=null,initM=null,initD=null,initH=null,initI=null,initS=null,initVal=null;$.fn.datePicker.defaultOptions={beginyear:2010,endyear:2020,monthDay:[31,28,31,30,31,30,31,31,30,31,30,31],days:["周日","周一","周二","周三","周四","周五","周六"],beginhour:0,endhour:23,beginminute:0,endminute:59,curdate:false,liH:40,theme:"date",mode:null,event:"click",show:true,scrollOpt:{snap:"li",checkDOMChanges:true,vScrollbar:false,hScrollbar:false,hScroll:false},callBack:function(){}};var opts=$.extend(true,{},$.fn.datePicker.defaultOptions,options);if(!opts.show){that.off("click")}else{that.on(opts.event,function(){init()})}function init(){initVal=that.val();if(!$("#datePlugin").size()){$("body").append('
')}document.getElementsByTagName("body")[0].addEventListener("touchmove",cancleDefault,false);if(!opts.curdate&&$.trim(initVal)!=""){var inputDate=null,inputTime=null;if(opts.theme=="date"||opts.theme=="datetime"){inputDate=initVal.split(" ")[0];initY=parseInt(inputDate.split("-")[0]-parseInt(opts.beginyear))+1,initM=parseInt(inputDate.split("-")[1]),initD=parseInt(inputDate.split("-")[2])}if(opts.theme=="datetime"){inputTime=initVal.split(" ")[1];initH=parseInt(inputTime.split(":")[0])+1,initI=parseInt(inputTime.split(":")[1])+1}if(opts.theme=="time"){inputTime=initVal;initH=parseInt(inputTime.split(":")[0])+1,initI=parseInt(inputTime.split(":")[1])+1}if(opts.theme=="month"){inputDate=initVal;initY=parseInt(inputDate.split("-")[0]-parseInt(opts.beginyear))+1,initM=parseInt(inputDate.split("-")[1])}}else{initY=parseInt(nowdate.getFullYear())-parseInt(opts.beginyear)+1,initM=parseInt(nowdate.getMonth())+1,initD=parseInt(nowdate.getDate()),initH=parseInt(nowdate.getHours())+1,initI=parseInt(nowdate.getMinutes())+1,initS=parseInt(nowdate.getSeconds())}$("#datePlugin").show();destroyScroll();renderDom();$("#d-okBtn").on("click",function(event){destroyScroll();document.getElementsByTagName("body")[0].removeEventListener("touchmove",cancleDefault,false);var y=$("#yearScroll li").eq(initY).data("num");var M=$("#monthScroll li").eq(initM).data("num");var d=$("#dayScroll li").eq(initD).data("num");var h=$("#hourScroll li").eq(initH).data("num");var m=$("#minuteScroll li").eq(initI).data("num");that.val($(".d-return-info").html());$("#datePlugin").hide().html("");opts.callBack({y:y,M:M,d:d,h:h,m:m})});$("#d-cancleBtn").on("click",function(event){destroyScroll();$("#datePlugin").hide().html("");document.getElementsByTagName("body")[0].removeEventListener("touchmove",cancleDefault,false)})}function cancleDefault(event){event.preventDefault()}function isLeap(y){if((y%4==0&&y%100!=0)||y%400==0){return true}else{return false}}function renderDom(){var mainHtml='
请选择日期

';var btnHtml='
';var dateHtml='
';dateHtml+='
';dateHtml+='
';dateHtml+='
';dateHtml+='
';dateHtml+="
";var timeHtml='
';timeHtml+='
';timeHtml+='
';timeHtml+='
';timeHtml+="
";var monthHtml='
';monthHtml+='
';monthHtml+='
';monthHtml+='
';monthHtml+="
";$("#datePlugin").html(mainHtml);switch(opts.theme){case"date":$(".d-date-box").append(dateHtml);createYear();createMonth();createDay(opts.monthDay[initM-1]);break;case"datetime":$(".d-date-box").append(dateHtml);$(".d-date-box").append(timeHtml);createYear();createMonth();createDay(opts.monthDay[initM-1]);createHour();createMinute();break;case"time":$(".d-date-box").append(timeHtml);createHour();createMinute();break;case"month":$(".d-date-box").append(monthHtml);createYear();createMonth();break;default:$(".d-date-box").append(dateHtml);createYear();createMonth();createDay(opts.monthDay[initM-1]);break}$(".d-date-box").append(btnHtml);showTxt()}function showTxt(){var y=$("#yearScroll li").eq(initY).data("num"),m=$("#monthScroll li").eq(initM).data("num"),d=$("#dayScroll li").eq(initD).data("num"),h=$("#hourScroll li").eq(initH).data("num"),i=$("#minuteScroll li").eq(initI).data("num"),date=new Date(y+"-"+m+"-"+d); switch(opts.theme){case"date":$(".d-day-info").html(opts.days[date.getDay()]+" ");$(".d-return-info").html(y+"-"+m+"-"+d);break;case"datetime":$(".d-day-info").html(opts.days[date.getDay()]+" ");$(".d-return-info").html(y+"-"+m+"-"+d+" "+h+":"+i);break;case"time":$(".d-return-info").html(h+":"+i);break;case"month":$(".d-return-info").html(y+"-"+m);break;default:$(".d-day-info").html(opts.days[date.getDay()]+" ");$(".d-return-info").html(y+"-"+m+"-"+d);break}}function destroyScroll(){var scrollArr=[yearScroll,monthScroll,dayScroll,hourScroll,minuteScroll];scrollArr.forEach(function(itm){if(itm!=null){itm.destroy();itm=null}})}function createYear(){var yearDom=$("#yearScroll"),yearNum=opts.endyear-opts.beginyear,yearHtml="
  • ";for(var i=0;i<=yearNum;i++){yearHtml+="
  • "+(opts.beginyear+i)+"年
  • "}yearDom.find("ul").html(yearHtml).append("
  • ");yearScroll=new iScroll("yearScroll",$.extend(true,{},opts.scrollOpt,{onScrollEnd:function(){yearScrollEnd(this)}}));yearScroll.scrollTo(0,-(initY-1)*opts.liH);function yearScrollEnd(_this){var yIndex=Math.floor(-_this.y/opts.liH);initY=yIndex+1;if(isLeap(parseInt(yearDom.find("li").eq(initY).data("num")))){opts.monthDay[1]=29}else{opts.monthDay[1]=28}if(initM==2&&opts.theme!="month"){createDay(opts.monthDay[initM-1])}showTxt()}}function createMonth(){var monthDom=$("#monthScroll"),monthHtml="
  • ";for(var i=1;i<=12;i++){if(i<10){monthHtml+='
  • 0'+i+"月
  • "}else{monthHtml+='
  • '+i+"月
  • "}}monthDom.find("ul").html(monthHtml).append("
  • ");monthScroll=new iScroll("monthScroll",$.extend(true,{},opts.scrollOpt,{onScrollEnd:function(){monthScrollEnd(this)}}));monthScroll.scrollTo(0,-(initM-1)*opts.liH);function monthScrollEnd(_this){console.log("month");var mIndex=Math.floor(-_this.y/opts.liH);var dayNum=opts.monthDay[mIndex];initM=mIndex+1;if(opts.theme!="month"){createDay(dayNum)}showTxt()}}function createDay(dayNum){var dayDom=$("#dayScroll"),dayHtml="
  • ";for(var i=1;i<=dayNum;i++){if(i<10){dayHtml+='
  • 0'+i+"日
  • "}else{dayHtml+='
  • '+i+"日
  • "}}dayDom.find("ul").html(dayHtml).append("
  • ");dayScroll=new iScroll("dayScroll",$.extend(true,{},opts.scrollOpt,{onScrollEnd:function(){dayScrollEnd(this)}}));if(initD>opts.monthDay[initM-1]){initD=1}dayScroll.scrollTo(0,-(initD-1)*opts.liH);function dayScrollEnd(_this){initD=Math.floor(-_this.y/opts.liH)+1;showTxt()}}function createHour(){var hourDom=$("#hourScroll"),hourHtml="
  • ";for(var i=opts.beginhour;i<=opts.endhour;i++){if(i<10){hourHtml+='
  • 0'+i+"时
  • "}else{hourHtml+='
  • '+i+"时
  • "}}hourDom.find("ul").html(hourHtml).append("
  • ");hourScroll=new iScroll("hourScroll",$.extend(true,{},opts.scrollOpt,{onScrollEnd:function(){hourScrollEnd(this)}}));hourScroll.scrollTo(0,-(initH-1)*opts.liH);function hourScrollEnd(_this){initH=Math.floor(-_this.y/opts.liH)+1;showTxt()}}function createMinute(){var minuteDom=$("#minuteScroll"),minuteHtml="
  • ";for(var i=0;i<=59;i++){if(i<10){minuteHtml+='
  • 0'+i+"分
  • "}else{minuteHtml+='
  • '+i+"分
  • "}}minuteDom.find("ul").html(minuteHtml).append("
  • ");minuteScroll=new iScroll("minuteScroll",$.extend(true,{},opts.scrollOpt,{onScrollEnd:function(){minuteScrollEnd(this)}}));minuteScroll.scrollTo(0,-(initI-1)*opts.liH);function minuteScrollEnd(_this){initI=Math.floor(-_this.y/opts.liH)+1;showTxt()}}})}})(typeof(Zepto)!="undefined"?Zepto:jQuery);