摘要:效果圖如下代碼日第一個參數(shù)代表是否是今天的日歷,如果第一個參數(shù)為,還需要傳遞倆個參數(shù),年和月。如何制作控制月份的控件方法如下得到頁面上的對象控件。
效果圖如下:
html代碼
-2017/12
+
1 | 2 | 3 | 4 | 5 | 6 | 日 |
---|
css代碼
table{ width: 300px; border-collapse:collapse; } th{ border-bottom: 2px solid springgreen; } td{ text-align: center; color: #999; } .this-month{ color: #333; } .today{ color: crimson; } .date-control{ width: 300px; height: 20px; background: silver; position: relative; } .date-control p{ text-align: center; line-height: 20px; color: #fff; } #pre-month,#next-mont{ display: block; height: 20px; width: 20px; color: #fff; position: absolute; top: 0; text-align: center; background: #01cd78; cursor: pointer; user-select: none; } #pre-month{ left: 0; } #next-mont{ right: 0; }
js代碼
function Calendar() { this.today = new Date(); this.table = document.getElementById("date-table").getElementsByTagName("tbody")[0]; this.preMontBtn = document.getElementById("pre-month"); this.nextMontBtn = document.getElementById("next-mont"); this.yearText = document.getElementById("table-year"); this.monthText = document.getElementById("table-month"); } Calendar.prototype={ constructor:Calendar, calendarInit:function (_isToday,_y,_m) { if(_isToday){ this.drawTable(this.today.getFullYear(),this.today.getMonth()); this.titleInit(this.today.getFullYear(),this.today.getMonth()+1); }else { this.drawTable(_y,_m-1); this.titleInit(_y,_m) } this.btnListener(); }, getMontInfo:function (_year,_month) { var firstDate = new Date(_year,_month,1); var lastDate = new Date(_year,_month+1,0); return { firstDay:firstDate.getDay()===0?7:firstDate.getDay(), lastDay:lastDate.getDay()===0?7:lastDate.getDay(), days:lastDate.getDate() } }, drawTable:function (_year,_month) { this.table.innerHTML = ""; var allDayNum = this.getDateNum(_year,_month); var rows = allDayNum.length/7; var index = 0; for(var i=0;i知識點(diǎn):
1、獲得今天的日期對象:var today = new Date();
2、獲得某一月第一天和最后一天的日期對象:
var firstDate = new Date(_year,_month,1);//指定(年)月,第一天的日期對象
var lastDate = new Date(_year,_month+1,0);//指定(年)月,最后一天的日期對象3、查看日期對象的相關(guān)信息:
假設(shè)d是一個日期對象(如:var d = new Date(),或,var d=new Date(2017,12,17))
d.getFullYear();//獲得d對應(yīng)的年
d.getMonth();//獲得d對應(yīng)的月
d.getDate();//獲得d對應(yīng)的星期4、查看日期對象的信息:
d.toLocaleString()//打印結(jié)果為:2017/12/16 上午9:55:26思路概要:(逆向)
結(jié)果為:繪制日歷
繪制table頭部,星期123457
繪制日期數(shù)字
得到日期數(shù)字?jǐn)?shù)組
知道這個月有幾天,第一天星期幾,最后一天星期幾(從而,得到日期數(shù)組)。方法解析:
1、如何知道某個月有多少天,第一天星期幾,最后一天星期幾?
方法如下:
function getThisMontInfo(_year,_month) { var firstDate = new Date(_year,_month,1);//當(dāng)前月第一天 var lastDate = new Date(_year,_month+1,0);//當(dāng)前月最后一天 return {//返回一個對象 firstDay:firstDate.getDay()===0?7:firstDate.getDay();//當(dāng)前月第一天的星期(星期日為0,如果其為零,讓其變?yōu)?)、 lastDay:lastDate.getDay()===0?7:lastDate.getDay(),//當(dāng)前月最后一天的星期 days:lastDate.getDate()//當(dāng)前月有多少天,即最后一天的日期。 } }2、如何獲得日期數(shù)組?
方法如下:
//前提知道年和月,即y和m //利用了上面的方法 thisMonthInfo = getThisMontInfo(y,m);//當(dāng)前月相關(guān)信息 preMontInfo = getThisMontInfo(y,m-1);//上個月的相關(guān)信息 var allDayNum = []; //向數(shù)組中添加當(dāng)前月日期。 for(i=0;i如何繪制table?
步驟為:
1、計(jì)算需要繪制多少行tr
2、繪制對應(yīng)行數(shù)的tr
3、在每行tr中繪制7個td
4、在td中添加數(shù)字
5、用css區(qū)分這個月的日期數(shù)字和上個月或下個月的日期數(shù)字。
方法如下:function drawTable(_year,_month) { table.innerHTML = ""; var allDayNum = getDateNum(_year,_month);//通過上面的方法獲得了日期數(shù)組 var rows = allDayNum.length/7;//計(jì)算需要繪制多少行tr var index = 0;//日期數(shù)組的坐標(biāo) for(var i=0;i如何制作控制月份的控件?
方法如下:
//得到頁面上的對象控件。 var preMontBtn = document.getElementById("pre-month"); var nextMontBtn = document.getElementById("next-mont"); //為控件添加監(jiān)聽事件 preMontBtn.addEventListener("click",function () { //獲得頁面上顯示的年月 var dateInfo = { year:document.getElementById("table-year").innerText*1, month:document.getElementById("table-month").innerText*1 }; //計(jì)算上個月的年和月 var newDateInfo = { year:dateInfo.month-1===0?dateInfo.year-1:dateInfo.year, month:dateInfo.month-1===0?12:dateInfo.month-1 }; //修改頁面上的年月信息 document.getElementById("table-year").innerText = newDateInfo.year; document.getElementById("table-month").innerText = newDateInfo.month; //重新繪制表格,利用的是上文的方法 drawTable(newDateInfo.year,newDateInfo.month-1); }); //對下個月按鈕的監(jiān)聽 nextMontBtn.addEventListener("click",function () { var dateInfo = { year:document.getElementById("table-year").innerText*1, month:document.getElementById("table-month").innerText*1 }; var newDateInfo = { year:dateInfo.month+1===13?dateInfo.year+1:dateInfo.year, month:dateInfo.month+1===13?1:dateInfo.month+1 }; document.getElementById("table-year").innerText = newDateInfo.year; document.getElementById("table-month").innerText = newDateInfo.month; drawTable(newDateInfo.year,newDateInfo.month-1); });完整代碼在開篇。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92194.html
摘要:效果圖如下代碼日第一個參數(shù)代表是否是今天的日歷,如果第一個參數(shù)為,還需要傳遞倆個參數(shù),年和月。如何制作控制月份的控件方法如下得到頁面上的對象控件。 效果圖如下:showImg(https://segmentfault.com/img/bV0rKL?w=379&h=221); html代碼 - 2017/12 + 1234...
摘要:效果圖如下代碼日第一個參數(shù)代表是否是今天的日歷,如果第一個參數(shù)為,還需要傳遞倆個參數(shù),年和月。如何制作控制月份的控件方法如下得到頁面上的對象控件。 效果圖如下:showImg(https://segmentfault.com/img/bV0rKL?w=379&h=221); html代碼 - 2017/12 + 1234...
摘要:閑暇之余,聽媳婦嘀咕說要給她做一個能表達(dá)她每日心情的小程序,只能她在上面發(fā)東西。既然媳婦發(fā)話了,就花點(diǎn)心思做一個吧,因?yàn)闆]有圖,所有布局全靠自己瞎編,下面結(jié)合圖片和代碼跟大家講解下實(shí)現(xiàn)過程,內(nèi)容略長,感興趣的可以一覽。 閑暇之余,聽媳婦嘀咕說要給她做一個能表達(dá)她每日心情的小程序,只能她在上面發(fā)東西。既然媳婦發(fā)話了,就花點(diǎn)心思做一個吧,因?yàn)闆]有UI圖,所有布局全靠自己瞎編,下面結(jié)合圖片和...
摘要:官網(wǎng)地址聊天機(jī)器人插件開發(fā)實(shí)例教程一創(chuàng)建插件在系統(tǒng)技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。我會簡單基于的簡潔視頻播放器組件前端掘金使用和實(shí)現(xiàn)購物車場景前端掘金本文是上篇文章的序章,一直想有機(jī)會再次實(shí)踐下。 2道面試題:輸入URL按回車&HTTP2 - 掘金通過幾輪面試,我發(fā)現(xiàn)真正那種問答的技術(shù)面,寫一堆項(xiàng)目真不如去刷技術(shù)文章作用大,因此刷了一段時間的博客和掘金,整理下曾經(jīng)被...
摘要:一些有用的一些有用的,包括轉(zhuǎn)換小箭頭三角形媒體查詢等中文指南是當(dāng)下最熱門的前端資源模塊化管理和打包工具。 nodejs 入門 nodejs 入門教程,大家可以在 github 上提交錯誤 2016 年最好用的表單驗(yàn)證庫 SMValidator.js 前端表單驗(yàn)證工具分享 淺談前端線上部署與運(yùn)維 說到前端部署,可能大多數(shù)前端工程師在工作中都是使用的公司現(xiàn)成的部署系統(tǒng),與SRE對接、一起完...
閱讀 2938·2023-04-26 02:22
閱讀 2292·2021-11-17 09:33
閱讀 3144·2021-09-22 16:06
閱讀 1078·2021-09-22 15:54
閱讀 3541·2019-08-29 13:44
閱讀 1921·2019-08-29 12:37
閱讀 1327·2019-08-26 14:04
閱讀 1920·2019-08-26 11:57