HTML 組件(HTML COMPONENTS)四
發(fā)布時間:2008-08-10 閱讀數(shù): 次 來源:網(wǎng)樂原科技
===編寫日歷二===
drawCal()函數(shù)做實際的畫圖工作,它接受以下參數(shù):
*firstDay.當月的第一天在一星期中的第幾天,該值從Date對象計數(shù)而來。例如:星期
天是一星期的第一天,星期六是第二天等等。例如:如果當月的第一天是星期四,那么
該參數(shù)是:5
*lastDate.每月的天數(shù),在五月等于31,在六月等于30
*date.當天的日期,必須在1到lastDate之間
*monthName.當月的名字
*year.年
函數(shù)的第一部分為以后的格式控制初始化一些變量:
// constant table settings
var border = 2; // 3D height of table's border
var cellspacing = 4; // width of table's border
var headerColor = "midnightblue"; // color of table's header
var headerSize = "+3"; // size of tables header font
var colWidth = 60; // width of columns in table
var dayCellHeight = 25; // height of cells containing days of the week
var dayColor = "darkblue"; // color of font representing week days
var cellHeight = 40; // height of cells representing dates in the calendar
var todayColor = "red"; // color specifying today's date in the calendar
var timeColor = "purple"; // color of font representing current time
現(xiàn)在我們初始化text變量并且在表格中建立一個頭元素,包括當前月和當前年:
// create basic table structure
var text = ""; // initialize accumulative variable to empty string
text += '<TABLE BORDER=' + border + ' CELLSPACING=' + cellspacing + '>'; // table settings
text += '<TH COLSPAN=7 HEIGHT=' + 10 + '>'; // create table header cell
text += '<FONT COLOR="' + headerColor + '" SIZE=' + headerSize + '>'; // set font for table header
text += monthName + ' ' + year;
text += '</FONT>'; // close table header's font settings
text += '</TH>'; // close header cell
我們保存表格單元的開始標示在openCol中,把結束標記放在closeCol中:
// variables to hold constant settings
var openCol = '<TD WIDTH=' + colWidth + ' HEIGHT=' + dayCellHeight + '>';
openCol += '<FONT COLOR="' + dayColor + '">';
var closeCol = '</FONT><TD>';
星期縮寫存放在weekDay[] 數(shù)組中:
// create array of abbreviated day names
var weekDay = new Array(7);
weekDay[0] = "Sun";
weekDay[1] = "Mon";
weekDay[2] = "Tues";
weekDay[3] = "Wed";
weekDay[4] = "Thu";
weekDay[5] = "Fri";
weekDay[6] = "Sat";
我們將重復一星期中的七天并且將他們打印在日歷的下一行:
// create first row of table to set column width and specify week day
text += '<TR ALIGN="center" VALIGN="center">';
for (var dayNum = 0; dayNum < 7; ++dayNum) {
text += openCol + weekDay[dayNum] + closeCol ;
}
text += '</TR>';
我們通過一個雙重循環(huán)打印當月的日期。外部循環(huán)重復產(chǎn)生日歷的行,我們從第一行到第Math.ceil((lastDate +
firstDay - 1) / 7)行?;c時間確信您的數(shù)學還好,比如:如果今天是星期四,firstday是5,要求的月份是六月,所以
lastDate是30。行數(shù)是(5 + 30 -1)/7 即34/7即4到5之間,這種情況下Math.ceil()將得到5。內(nèi)部循環(huán)重復遍歷一星期的七
天,以下是雙重循環(huán)程序段:
// declaration and initialization of two variables to help with tables
var dayOfMonth = 1;
var curCell = 1;
for (var row = 1; row <= Math.ceil((lastDate + firstDay - 1) / 7); ++row) {
text += '<TR ALIGN="right" VALIGN="top">';
for (var col = 1; col <= 7; ++col) {
現(xiàn)在我們做個決定,首先:一些單元根本不屬于該月,即當月第一天前的和當月最后一天后的,我們只是跳過這些
單元:
if ((curCell < firstDay) || (dayOfMonth > lastDate)) {
text += '';
curCell++;
} else {
這些單元將被格式為和我們指定給TAG標記的確省樣式一致的格式。我們設置TD標志的樣式如下:
<STYLE>
TD {
background-color:tan;
width:50;
height:50;
}
</STYLE>
注意不屬于該月的單元都是黃褐色的
第二個決定是:我們怎么打印當天的日期,這里我們調(diào)用TODAY HTML組件的DAY自定義標記,將該月的日期傳給它的
value屬性。
if (dayOfMonth == date) { // current cell represents today's date
text += '<TD><TODAY:DAY value=' + dayOfMonth + '></TODAY:DAY></TD>';
} else {
最后一個選擇是打印該月中其他的所有天的日期。我們調(diào)用ANYDAY HTML組件的DAY自定義標記,象上面一樣將該月的
日期傳它的value屬性。
text += '<TD><ANYDAY:DAY value=' + dayOfMonth + '></ANYDAY:DAY></TD>';
最后我們要結束循環(huán)。在每個星期遍歷結尾我們遞增dayOfTheMonth,在每行的結束我們需要增加一個TR標記,在雙重
循環(huán)的結束我們需要結束表格,并且輸出并打印text變量。
}
dayOfMonth++;
}
}
text += '</TR>';
}
// close all basic table tags
text += '</TABLE>';
text += '</CENTER>';
// print accumulative HTML string
document.write(text);
}