/**
* Created by Administrator on 2015/11/18.*/
functionCalendar(param,callback_fn){this.wrap =param.wrap;this.tb =param.tb;this.year = 0;this.month = 0;this.dy = 0;this.init = function(){var currDate = newDate();this.year =currDate.getFullYear();this.month =currDate.getMonth();this.dy =currDate.getDate();this.initTable(currDate.getFullYear(),currDate.getMonth(),currDate.getDate());var self = this;var preMonth = document.getElementById("preMonth");var nextMonth = document.getElementById("nextMonth");var preYear = document.getElementById("preYear");var nextYear = document.getElementById("nextYear");//点击上一月触发的事件
preMonth.addEventListener("click",function(){if(self.month == 0){
self.year--;
self.month= 11;
}else{
self.month--;
}
self.initTable(self.year,self.month,self.dy);
});//点击下一月触发的事件
nextMonth.addEventListener("click",function(){if(self.month == 11){
self.year++;
self.month= 0;
}else{
self.month++}
self.initTable(self.year,self.month,self.dy);
});//点击上一年触发的事件
preYear.addEventListener("click",function(){
self.year--;
self.initTable(self.year,self.month,self.dy);
});//点击下一年触发的事件
nextYear.addEventListener("click",function(){
self.year++;
self.initTable(self.year,self.month,self.dy);
});functiontapTd(e){var target =e.target;if(target.nodeName.toLocaleLowerCase() == "td"){var dy =target.innerHTML;var ret ={
year:self.year,
month:self.month+1,
dy:dy
}
callback_fn.call(self,ret);
self.wrap.style.display= "none";
self.tb.removeEventListener("click",tapTd);
}
}//点击单元格
this.tb.addEventListener("click",tapTd);
}this.init();
}
Calendar.prototype.initTable= function(year,month,dy){var dyNum = getDysOfMonth(year);//当前月的天数
var firstDay = getFirstDay(year,month,dy);//当前月第一天是星期几
var trNum=Math.ceil((dyNum[month] + firstDay)/7);//表格的行数
var str = "
日一二三四五六";for(i=0;istr+="
";for(k=0;k<7;k++) { //表格每行的单元格idx=i*7+k; //单元格自然序列号
date_str=idx-firstDay+1; //计算日期
(date_str<=0 || date_str>dyNum[month]) ? date_str=" " : date_str=idx-firstDay+1; //过滤无效日期(小于等于零的、大于月总天数的)
//打印日期:今天底色为红
date_str==dy ? str+="
" + date_str + "" : str+="" + date_str + "";}
str+="
"; //表格的行结束}var showCalendar = document.getElementById("showCalendar");
showCalendar.innerHTML= year+"-"+(month+1);this.tb.innerHTML =str;
}
Calendar.prototype.showCal= function(){this.wrap.style.display = "block";
}
Calendar.prototype.hideCal= function(){this.wrap.style.display = "none";
}/**
* @desc :该方法获取指定月份的第一天是星期几
* @param year:年
* @param month:月
* @param dy:日
* @returns {number} 当月第一天是星期几*/
functiongetFirstDay(year,month,tdy){var n1str=new Date(year,month,1); //当月第一天Date资讯
var firstday=n1str.getDay(); //当月第一天星期几
console.log(firstday);returnfirstday;
}/**
* @desc:该方法获取指定年的每个月的天数
* @param year :年
* @returns {Array} 每个月的天数*/
functiongetDysOfMonth(year){var sepMon = 28 + (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0));var m_days=new Array(31,sepMon,31,30,31,30,31,31,30,31,30,31); //各月份的总天数
returnm_days;
}
本文介绍了一个使用JavaScript实现的日历插件,该插件能够显示当前日期,并允许用户通过点击来选择日期。插件还提供了上一个月、下一个月、上一年及下一年的功能。
754

被折叠的 条评论
为什么被折叠?



