十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
web頁(yè)面中很多地方都會(huì)用到日歷顯示,選擇等,本文用html、css、javascript實(shí)現(xiàn)簡(jiǎn)單的日歷。完成以后的效果與頁(yè)面左側(cè)的效果差不多,可以切換上個(gè)月、下個(gè)月。也可以根據(jù)實(shí)際情況進(jìn)行擴(kuò)展。
成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
html
html部分比較簡(jiǎn)單,聲明一個(gè)div,具體的html用javascript生成。整體內(nèi)容大概是這樣的:
demo
css
/* 整體設(shè)置 */ *{margin:0px;padding:0px;} /** * 設(shè)置日歷的大小 */ .calendar{ width: 240px; height: 400px; display: block; } /** * 設(shè)置日歷頂部盒子 */ .calendar .calendar-title-box{ position: relative; width: 100%; height: 36px; line-height: 36px; text-align:center; border-bottom: 1px solid #ddd; } /** * 設(shè)置上個(gè)月的按鈕圖標(biāo) */ .calendar .prev-month { position: absolute; top: 12px; left: 0px; display: inline-block; width: 0px; height: 0px; border-left: 0px; border-top: 6px solid transparent; border-right: 8px solid #999; border-bottom: 6px solid transparent; cursor: pointer; } /** * 設(shè)置下個(gè)月的按鈕圖標(biāo) */ .calendar .next-month { position: absolute; top: 12px; right: 0px; display: inline-block; width: 0px; height: 0px; border-right: 0px; border-top: 6px solid transparent; border-left: 8px solid #999; border-bottom: 6px solid transparent; cursor: pointer; } /* 設(shè)置日歷表格樣式 */ .calendar-table{ width: 100%; border-collapse: collapse; text-align:center; } /* 表格行高 */ .calendar-table tr{ height: 30px; line-height: 30px; } /* 當(dāng)前天 顏色特殊顯示 */ .currentDay { color: red; } /* 本月 文字顏色 */ .currentMonth { color: #999; } /* 其他月顏色 */ .otherMonth{ color: #ede; }
樣式設(shè)置基本沒(méi)什么課說(shuō)的,一些簡(jiǎn)單的設(shè)置。比如特殊的是表示“上個(gè)月”、“下個(gè)月”的圖標(biāo),采用的絕對(duì)定位、利用css中的border屬性設(shè)置樣式。
javascript Date對(duì)象
開(kāi)始正式的js代碼之前,需要先了解js中的Date對(duì)象,通過(guò)Date對(duì)象,可以獲取到年月日時(shí)分秒以及時(shí)間戳等信息,具體參考: http://www.w3school.com.cn/jsref/jsref_obj_date.asp
var d1 = new Date(); // 獲取當(dāng)前系統(tǒng)時(shí)間 我現(xiàn)在的時(shí)間是 2016年4月25日 星期一
d1.getFullYear(); // 獲取年信息, 2016
d1.getMonth(); // 獲取月信息(從0開(kāi)始 范圍:0-11) 3
d1.getDate(); // 獲取天信息 此處結(jié)果:25
d1.getDay(); // 獲取星期信息 (0-6) 此處結(jié)果: 1
也可以在初始化的時(shí)候直接設(shè)置年月日信息
# 設(shè)置 2016年3月15日
var d2 = new Date(2016, 2, 15); // 月是從0開(kāi)始計(jì)數(shù), 需要減一
d2.getFullYear(); // 2016
d2.getMonth(); // 2
d2.getDate(); // 15
d2.toLocaleDateString(); // "2016/3/15" 證明設(shè)置正確
日歷中會(huì)涉及到每個(gè)月多少天之類的問(wèn)題,在js中很簡(jiǎn)單,如果設(shè)置年月日的時(shí)候,超出當(dāng)月,js會(huì)自動(dòng)算成下個(gè)月的,例如4月只有30天,如果設(shè)置成31 日,獲得的Date類型中自動(dòng)會(huì)算成5月1日;如果設(shè)置成5月0日,js會(huì)處理成4月30日,那么5月-1日也就是4月29日
var d3 = new Date(2016, 3, 30); d3.toLocaleDateString(); // "2016/4/30" var d4 = new Date(2016, 3, 31); d4.toLocaleDateString(); // "2016/5/1" var d5 = new Date(2016, 3, 33); d5.toLocaleDateString(); // "2016/5/3" var d6 = new Date(2016, 4, 1); d6.toLocaleDateString(); // "2016/5/1" var d7 = new Date(2016, 4, 0); d7.toLocaleDateString(); // "2016/4/30" var d8 = new Date(2016, 4, -3); d8.toLocaleDateString(); // "2016/4/27"
javascript
了解了js中Date對(duì)象的基本用法,接下來(lái)就是代碼實(shí)現(xiàn)部分了,整體思路是這樣的:定義一個(gè)全局的dateObj變量,用來(lái)記錄表格中需要顯示的 年月信息。 標(biāo)題中的內(nèi)容根據(jù)dateObj中取,表格中的日期則中dateObj中取到年月對(duì)應(yīng)的1號(hào)的所有信息,即可確定1號(hào)在表格第一行的位置,以此倒推上個(gè)月 最后幾天的數(shù)據(jù)、正推本月和下個(gè)月的數(shù)據(jù)。
具體步驟:
1.聲明dateObj變量,并賦初值為當(dāng)前系統(tǒng)時(shí)間
2.給calendar div中渲染html元素
3.通過(guò)dateObj獲取當(dāng)月1號(hào)的信息,并以此遍歷出表格中所有日期
4.給上一月、下一月圖標(biāo)綁定事件
(function(){ /* * 用于記錄日期,顯示的時(shí)候,根據(jù)dateObj中的日期的年月顯示 */ var dateObj = (function(){ var _date = new Date(); // 默認(rèn)為當(dāng)前系統(tǒng)時(shí)間 return { getDate : function(){ return _date; }, setDate : function(date) { _date = date; } }; })(); // 設(shè)置calendar div中的html部分 renderHtml(); // 表格中顯示日期 showCalendarData(); // 綁定事件 bindEvent(); /** * 渲染html結(jié)構(gòu) */ function renderHtml() { var calendar = document.getElementById("calendar"); var titleBox = document.createElement("div"); // 標(biāo)題盒子 設(shè)置上一月 下一月 標(biāo)題 var bodyBox = document.createElement("div"); // 表格區(qū) 顯示數(shù)據(jù) // 設(shè)置標(biāo)題盒子中的html titleBox.className = 'calendar-title-box'; titleBox.innerHTML = "" + "" + ""; calendar.appendChild(titleBox); // 添加到calendar div中 // 設(shè)置表格區(qū)的html結(jié)構(gòu) bodyBox.className = 'calendar-body-box'; var _headHtml = "" + " "; var _bodyHtml = ""; // 一個(gè)月最多31天,所以一個(gè)月最多占6行表格 for(var i = 0; i < 6; i++) { _bodyHtml += "日 " + "一 " + "二 " + "三 " + "四 " + "五 " + "六 " + "" + " "; } bodyBox.innerHTML = "" + " " + " " + " " + " " + " " + " " + "
以上就是html簡(jiǎn)單日歷的實(shí)現(xiàn)(附源碼)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!