软件学堂

网游分类软件分类

用JS自定义的日历

2012-11-06 来源:网络

【实例名称】

用JS自定义的日历

【实例描述】

在很多网络名人的Blog上都增加了一些个性时尚的日历。本例学习如何使用JavaScript设计自己的日历。

【实例代码】

 

<html xmlns="http://www.w3.org/1999/xhtml" > <head>     <title>无标题页-学无忧(www.xue51.com)</title>

<script language="javascript">  var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); //定义月份  var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31);                      //定义每月的天数  var days = new Array("日","一", "二", "三","四", "五", "六");  //定义星期几  var classTemp;  var today=new getToday();  var year=today.year;            //获取年份  var month=today.month;          //获取月份  var newCal; //用来获取指定年月中的天数  function getDays(month, year)  {   if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28;   else return daysInMonth[month];  } //获取今天的年、月、日  function getToday() {   this.now = new Date();   this.year = this.now.getFullYear();   this.month = this.now.getMonth();   this.day = this.now.getDate();  } //定义日历表的显示方法  function Calendar() {   newCal = new Date(year,month,1);   today = new getToday();     var day = -1;   var startDay = newCal.getDay();   var endDay=getDays(newCal.getMonth(), newCal.getFullYear());   var daily = 0;   if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth()))   {    day = today.day;   }   var caltable = document.all.caltable.tBodies.calendar;   var intDaysInMonth = getDays(newCal.getMonth(), newCal.getFullYear());

  for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++)    for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++)    {     var cell = caltable.rows[intWeek].cells[intDay];     var montemp=(newCal.getMonth()+1) <10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1);             if ((intDay == startDay) && (0 == daily)){ daily = 1;}     var daytemp=daily<10?("0"+daily):(daily);     var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">";     if(day==daily) cell.className="DayNow";     else if(intDay==6) cell.className = "DaySat";     else if (intDay==0) cell.className ="DaySun";     else cell.className="Day";     if ((daily > 0) && (daily <= intDaysInMonth))     {      cell.innerText = daily;      daily++;     } else     {      cell.className="CalendarTD";      cell.innerText = "";     }   }   document.all.year.value=year;   document.all.month.value=month+1;  } //实现月份向前翻页的方法  function subMonth()  {   if ((month-1)<0)   {    month=11;    year=year-1;   } else   {    month=month-1;   }   Calendar();  } //实现月份向后翻页的方法  function addMonth()  {   if((month+1)>11)   {    month=0;    year=year+1;   } else   {    month=month+1;   }   Calendar();  } //判断用户自己输入的年份和月份  function setDate()  {   if (document.all.month.value<1||document.all.month.value>12)   {    alert("月的有效范围在1-12之间!");    return;   }   year=Math.ceil(document.all.year.value);   month=Math.ceil(document.all.month.value-1);   Calendar();  }  //设置按钮的样式 function buttonOver() {  var obj = window.event.srcElement;  obj.runtimeStyle.cssText = "background-color:#FFFFFF"; } function buttonOut() {  var obj = window.event.srcElement;  window.setTimeout(function(){obj.runtimeStyle.cssText = "";},300); } </script> <Style> Input {font-family: verdana;font-size: 9pt; text-decoration: none;background-color: #FFFFFF; height: 20px;border: 1px solid #666666;color:#000000;} .Calendar {font-family: verdana;text-decoration: none; width: 170;background-color: #C0D0E8; font-size: 9pt;border:0px dotted #1C6FA5;} .CalendarTD {font-family: verdana;font-size: 7pt; color: #000000;background-color:#f6f6f6;height: 20px; width:11%;text-align: center;} .Title {font-family: verdana;font-size: 11pt; font-weight: normal;height: 24px;text-align: center; color: #333333;text-decoration: none;background-color: #A4B9D7; border-top-width: 1px;border-right-width: 1px; border-bottom-width: 1px;border-left-width: 1px; border-bottom-style:1px;border-top-color: #999999; border-right-color: #999999;border-bottom-color: #999999; border-left-color: #999999;} .Day {font-family: verdana;font-size: 7pt; color:#243F65;background-color: #E5E9F2;height: 20px; width:11%;text-align: center;} .DaySat {font-family: verdana;font-size: 7pt; color:#FF0000;text-decoration: none;background-color:#E5E9F2; text-align: center;height: 18px;width: 12%;} .DaySun {font-family: verdana;font-size: 7pt;color: #FF0000; text-decoration: none;background-color:#E5E9F2; text-align: center;height: 18px;width: 12%;} .DayNow {font-family: verdana;font-size: 7pt; font-weight: bold;color: #000000;background-color: #FFFFFF; height: 20px;text-align: center;} .DayTitle {font-family: verdana;font-size: 9pt;color: #000000; background-color: #C0D0E8;height: 20px;width:11%;text-align: center;} .DaySatTitle {font-family: verdana;font-size: 9pt;color:#FF0000; text-decoration: none;background-color:#C0D0E8;text-align: center; height: 20px;width: 12%;} .DaySunTitle {font-family: verdana;font-size: 9pt;color: #FF0000; text-decoration: none;background-color: #C0D0E8;text-align: center; height: 20px;width: 12%;} .DayButton {font-family: Webdings;font-size: 9pt; font-weight: bold;color: #243F65;cursor:hand;text-decoration: none;} </Style>

需要在body中添加—个表格,并在加载事件中调用“calendar”方法,代码如下所示: </head> <body onload=" Calendar()"> <table border="0" cellpadding="0" cellspacing="1" class="Calendar" id="caltable"> <thead>      <tr align="center" valign="middle">   <td colspan="7" class="Title">    <a href="javaScript:subMonth();" title="上一月" Class="DayButton">3</a>    <input name="year" type="text" size="4" maxlength="4" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')"  onpaste="this.value=this.value.replace(/[^0-9]/g,'')"> 年 <input name="month" type="text" size="1" maxlength="2" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')"  onpaste="this.value=this.value.replace(/[^0-9]/g,'')"> 月 <a href="JavaScript:addMonth();" title="下一月" Class="DayButton">4</a>   </td>  </tr>  <tr align="center" valign="middle">   <script language="javascript">     document.write("<td class=DaySunTitle id=diary >" + days[0] + "</td>");    for (var intLoop = 1; intLoop < days.length-1;intLoop++)     document.write("<td class=DayTitle id=diary>" + days[intLoop] + "</td>");     document.write("<td class=DaySatTitle id=diary>" + days[intLoop] + "</td>");   </script>  </tr> </thead> <tbody border="1" cellspacing="0" cellpadding="0" ID="calendar" ALIGN="CENTER" >  <script language="javascript">   for (var intWeeks = 0; intWeeks < 6; intWeeks++)   {    document.write("<TR style='cursor:hand'>");    for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=CalendarTD onMouseover='buttonOver();' onMouseOut='buttonOut();'></TD>");    document.write("</TR>");   }  </script> </tbody> </table> </body> </html>

 

 

【运行效果】

 自定义的日历运行效果

【难点剖析】

本例的难点是对天数的精确计算,尤其是闰年的二月份。本例中计算闰年使用的表达式是“((0==year%4)&&(0!=(year%100)))II(0==year%400)?29:28;”如果是闰年,则二月份的天数为29,否则是28。

【源码下载】

为了JS代码的准确性,请点击:JS自定义的日历 进行本实例源码下载 

上一篇:用JavaScript制作的特色时钟
下一篇:JS代码制作生日提醒器

相关文章