📄 simplecalendar.js
字号:
/* ***************************************************************************************************** Author : Lea Smart Source : www.totallysmartit.com Date : 7/3/2001 DHTML Calendar Version 1.2 You are free to use this code if you retain this header. You do not need to link to my site (be nice though!) Amendments 22 Jan 2002; Added ns resize bug code; rewrote date functions into Date 'class'; Added support for yyyy-mm-dd date format Added support for calendar beginning on any day 7th Feb 2002 Fixed day highlight when year wasn't current year bug 9th Jun 2002 Fixed bug with weekend colour Amended the code for the date functions extensions. Shortened addDays code considerably ***************************************************************************************************** */ var timeoutDelay = 2000; // milliseconds, change this if you like, set to 0 for the calendar to never auto disappear var g_startDay = 0// 0=sunday, 1=monday // preload images var imgUp = new Image(8,12); //imgUp.src = 'images/up.gif'; var imgDown = new Image(8,12); //imgDown.src = 'images/down.gif'; // used by timeout auto hide functions var timeoutId = false; // the now standard browser sniffer class function Browser(){ this.dom = document.getElementById?1:0; this.ie4 = (document.all && !this.dom)?1:0; this.ns4 = (document.layers && !this.dom)?1:0; this.ns6 = (this.dom && !document.all)?1:0; this.ie5 = (this.dom && document.all)?1:0; this.ok = this.dom || this.ie4 || this.ns4; this.platform = navigator.platform; } var browser = new Browser(); // dom browsers require this written to the HEAD section if (browser.dom || browser.ie4){ document.writeln('<style>'); document.writeln('#container {'); document.writeln('position : absolute;'); document.writeln('left : 100px;'); document.writeln('top : 100px;'); document.writeln('width : 124px;');; browser.platform=='Win32'?height=140:height=145; document.writeln('height : ' + height +'px;'); document.writeln('clip:rect(0px 124px ' + height + 'px 0px);'); //document.writeln('overflow : hidden;'); document.writeln('visibility : hidden;'); document.writeln('background-color : #ffffff'); document.writeln('}'); document.writeln('</style>') document.write('<div id="container"'); if (timeoutDelay) document.write(' onmouseout="calendarTimeout();" onmouseover="if (timeoutId) clearTimeout(timeoutId);"'); document.write('></div>'); } var g_Calendar; // global to hold the calendar reference, set by constructor function calendarTimeout(){ if (browser.ie4 || browser.ie5){ if (window.event.srcElement && window.event.srcElement.name!='month') timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay); } if (browser.ns6 || browser.ns4){ timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay); } } // constructor for calendar class function Calendar(){ g_Calendar = this; // some constants needed throughout the program this.daysOfWeek = new Array("Su","Mo","Tu","We","Th","Fr","Sa"); this.months = new Array("January","February","March","April","May","June","July","August","September","October","November","December"); this.daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if (browser.ns4){ var tmpLayer = new Layer(127); if (timeoutDelay){ tmpLayer.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT); tmpLayer.onmouseover = function(event) { if (timeoutId) clearTimeout(timeoutId); }; tmpLayer.onmouseout = function(event) { timeoutId=setTimeout('g_Calendar.hide()',timeoutDelay);}; } tmpLayer.x = 100; tmpLayer.y = 100; tmpLayer.bgColor = "#ffffff"; } if (browser.dom || browser.ie4){ var tmpLayer = browser.dom?document.getElementById('container'):document.all.container; } this.containerLayer = tmpLayer; if (browser.ns4 && browser.platform=='Win32') { this.containerLayer.clip.height=134; this.containerLayer.clip.width=127; } } Calendar.prototype.getFirstDOM = function() { var thedate = new Date(); thedate.setDate(1); thedate.setMonth(this.month); thedate.setFullYear(this.year); return thedate.getDay(); } Calendar.prototype.getDaysInMonth = function (){ if (this.month!=1) { return this.daysInMonth[this.month] } else { // is it a leap year if (Date.isLeapYear(this.year)) { return 29; } else { return 28; } } } Calendar.prototype.buildString = function(){ var tmpStr = '<form onSubmit="this.year.blur();return false;"><table width="100%" border="0" cellspacing="0" cellpadding="2" class="calBorderColor"><tr><td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">'; tmpStr += '<tr>'; tmpStr += '<td width="60%" class="cal" align="left">'; if (this.hasDropDown) { tmpStr += '<select class="month" name="month" onchange="g_Calendar.selectChange();">'; for (var i=0;i<this.months.length;i++){ tmpStr += '<option value="' + i + '"' if (i == this.month) tmpStr += ' selected'; tmpStr += '>' + this.months[i] + '</option>'; } tmpStr += '</select>'; } else { tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td><a href="javascript: g_Calendar.changeMonth(-1);"><img name="calendar" src="" width="8" height="12" border="0" alt=""></a></td><td class="cal" width="100%" align="center">' + this.months[this.month] + '</td><td class="cal"><a href="javascript: g_Calendar.changeMonth(+1);"><img name="calendar" src="" width="8" height="12" border="0" alt=""></a></td></tr></table>'; } tmpStr += '</td>'; /* observation : for some reason if the below event is changed to 'onChange' rather than 'onBlur' it totally crashes IE (4 and 5)! */ tmpStr += '<td width="40%" align="right" class="cal">'; if (this.hasDropDown) { tmpStr += '<input class="year" type="text" size="'; // get round NS4 win32 lenght of year input problem (browser.ns4 && browser.platform=='Win32')?tmpStr += 1:tmpStr += 4; tmpStr += '" name="year" maxlength="4" onBlur="g_Calendar.inputChange();" value="' + this.year + '">'; } else { tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a href="javascript: g_Calendar.changeYear(-1);"><img name="calendar" src="" width="8" height="12" border="0" alt=""></a></td><td class="cal" width="100%" align="center">' + this.year + '</td><td class="cal"><a href="javascript: g_Calendar.changeYear(+1);"><img name="calendar" src="" width="8" height="12" border="0" alt=""></a></td></tr></table>' } tmpStr += '</td>'; tmpStr += '</tr>'; tmpStr += '</table>'; var iCount = 1; var iFirstDOM = (7+this.getFirstDOM()-g_startDay)%7; // to prevent calling it in a loop var iDaysInMonth = this.getDaysInMonth(); // to prevent calling it in a loop tmpStr += '<table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">'; tmpStr += '<tr>'; for (var i=0;i<7;i++){ tmpStr += '<td align="center" class="calDaysColor">' + this.daysOfWeek[(g_startDay+i)%7] + '</td>'; } tmpStr += '</tr>'; var tmpFrom = parseInt('' + this.dateFromYear + this.dateFromMonth + this.dateFromDay,10); var tmpTo = parseInt('' + this.dateToYear + this.dateToMonth + this.dateToDay,10); var tmpCompare; for (var j=1;j<=6;j++){ tmpStr += '<tr>'; for (var i=1;i<=7;i++){ tmpStr += '<td width="16" align="center" ' if ( (7*(j-1) + i)>=iFirstDOM+1 && iCount <= iDaysInMonth){ if (iCount==this.day && this.year==this.oYear && this.month==this.oMonth) tmpStr += 'class="calHighlightColor"'; else { if (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"'; else tmpStr += 'class="cal"'; } tmpStr += '>'; /* could create a date object here and compare that but probably more efficient to convert to a number and compare number as numbers are primitives */ tmpCompare = parseInt('' + this.year + padZero(this.month) + padZero(iCount),10); if (tmpCompare >= tmpFrom && tmpCompare <= tmpTo) { tmpStr += '<a class="cal" href="javascript: g_Calendar.clickDay(' + iCount + ');">' + iCount + '</a>'; } else { tmpStr += '<span class="disabled">' + iCount + '</span>'; } iCount++; } else { if (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"'; else tmpStr +='class="cal"'; tmpStr += '> '; } tmpStr += '</td>' } tmpStr += '</tr>' } tmpStr += '</table></td></tr></table></form>' return tmpStr; } Calendar.prototype.selectChange = function(){ this.month = browser.ns6?this.containerLayer.ownerDocument.forms[0].month.selectedIndex:this.containerLayer.document.forms[0].month.selectedIndex; this.writeString(this.buildString()); } Calendar.prototype.inputChange = function(){ var tmp = browser.ns6?this.containerLayer.ownerDocument.forms[0].year:this.containerLayer.document.forms[0].year; if (tmp.value >=1900 || tmp.value <=2100){ this.year = tmp.value; this.writeString(this.buildString()); } else { tmp.value = this.year; } } Calendar.prototype.changeYear = function(incr){ (incr==1)?this.year++:this.year--; this.writeString(this.buildString()); } Calendar.prototype.changeMonth = function(incr){ if (this.month==11 && incr==1){ this.month = 0; this.year++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -