原生js實(shí)現(xiàn)仿window10系統(tǒng)日歷效果的實(shí)例
舞動(dòng)的靈魂版js日歷,完全采用js實(shí)現(xiàn),故而實(shí)現(xiàn)了與語言無關(guān),jsp、asp.net php asp均可使用.無論你是開發(fā)軟件,還是網(wǎng)站,均是不可或缺的實(shí)用代碼。
該日歷主要實(shí)現(xiàn)了獲取當(dāng)前時(shí)間時(shí)分秒,年月日星期,動(dòng)態(tài)生成選擇年的select,月的select,然后根據(jù)你所選中的年月,顯示該年月對(duì)應(yīng)的這一個(gè)月的日期。
點(diǎn)擊上一個(gè)月,下一個(gè)月按鈕,在下拉列表中顯示對(duì)應(yīng)的年月。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #calendar { position: absolute; padding: 5px; border: 1px solid #000000; background: #8f3349; display: none; } #todayTime { padding: 5px 0; font-size: 40px; color: white; } #todayDate { padding: 5px 0; font-size: 24px; color: #ffcf88; } #tools { padding: 5px 0; height: 30px; color: white; } #tools .l { float: left; } #tools .r { float: right; } table { width: 100%; color: white; } table th { color: #a2cbf3; } table td { text-align: center; cursor: default; } table td.today { background: #cc2951; color: white; } </style> <script> window.onload = function() { var text1 = document.getElementById('text1'); text1.onfocus = function() { calendar(); } // calendar(); function calendar() { var calendarElement = document.getElementById('calendar'); var todayTimeElement = document.getElementById('todayTime'); var todayDateElement = document.getElementById('todayDate'); var selectYearElement = document.getElementById('selectYear'); var selectMonthElement = document.getElementById('selectMonth'); var showTableElement = document.getElementById('showTable'); var prevMonthElement = document.getElementById('prevMonth'); var nextMonthElement = document.getElementById('nextMonth'); calendarElement.style.display = 'block'; /* * 獲取今天的時(shí)間 * */ var today = new Date(); //設(shè)置日歷顯示的年月 var showYear = today.getFullYear(); var showMonth = today.getMonth(); //持續(xù)更新當(dāng)前時(shí)間 updateTime(); //顯示當(dāng)前的年月日星期 todayDateElement.innerHTML = getDate(today); //動(dòng)態(tài)生成選擇年的select for (var i=1970; i<2020; i++) { var option = document.createElement('option'); option.value = i; option.innerHTML = i; if ( i == showYear ) { option.selected = true; } selectYearElement.appendChild(option); } //動(dòng)態(tài)生成選擇月的select for (var i=1; i<13; i++) { var option = document.createElement('option'); option.value = i - 1; option.innerHTML = i; if ( i == showMonth + 1 ) { option.selected = true; } selectMonthElement.appendChild(option); } //初始化顯示table showTable(); //選擇年 selectYearElement.onchange = function() { showYear = this.value; showTable(); showOption(); } //選擇月 selectMonthElement.onchange = function() { showMonth = Number(this.value); showTable(); showOption(); } //上一個(gè)月 prevMonthElement.onclick = function() { showMonth--; showTable(); showOption(); } //下一個(gè)月 nextMonthElement.onclick = function() { showMonth++; showTable(); showOption(); } /* * 實(shí)時(shí)更新當(dāng)前時(shí)間 * */ function updateTime() { var timer = null; //每個(gè)500毫秒獲取當(dāng)前的時(shí)間,并把當(dāng)前的時(shí)間格式化顯示到指定位置 var today = new Date(); todayTimeElement.innerHTML = getTime(today); timer = setInterval(function() { var today = new Date(); todayTimeElement.innerHTML = getTime(today); }, 500); } function showTable() { showTableElement.tBodies[0].innerHTML = ''; //根據(jù)當(dāng)前需要顯示的年和月來創(chuàng)建日歷 //創(chuàng)建一個(gè)要顯示的年月的下一個(gè)的日期對(duì)象 var date1 = new Date(showYear, showMonth+1, 1, 0, 0, 0); //對(duì)下一個(gè)月的1號(hào)0時(shí)0分0秒的時(shí)間 - 1得到要顯示的年月的最后一天的時(shí)間 var date2 = new Date(date1.getTime() - 1); //得到要顯示的年月的總天數(shù) var showMonthDays = date2.getDate(); //獲取要顯示的年月的1日的星期,從0開始的星期 date2.setDate(1); //showMonthWeek表示這個(gè)月的1日的星期,也可以作為表格中前面空白的單元格的個(gè)數(shù) var showMonthWeek = date2.getDay(); var cells = 7; var rows = Math.ceil( (showMonthDays + showMonthWeek) / cells ); //通過上面計(jì)算出來的行和列生成表格 //沒生成一行就生成7列 //行的循環(huán) for ( var i=0; i<rows; i++ ) { var tr = document.createElement('tr'); //列的循環(huán) for ( var j=0; j<cells; j++ ) { var td = document.createElement('td'); var v = i*cells + j - ( showMonthWeek - 1 ); //根據(jù)這個(gè)月的日期控制顯示的數(shù)字 //td.innerHTML = v; if ( v > 0 && v <= showMonthDays ) { //高亮顯示今天的日期 if ( today.getFullYear() == showYear && today.getMonth() == showMonth && today.getDate() == v ) { td.className = 'today'; } td.innerHTML = v; } else { td.innerHTML = ''; } td.ondblclick = function() { calendarElement.style.display = 'none'; text1.value = showYear + '年' + (showMonth+1) + '月' + this.innerHTML + '日'; } tr.appendChild(td); } showTableElement.tBodies[0].appendChild(tr); } } function showOption() { var date = new Date(showYear, showMonth); var sy = date.getFullYear(); var sm = date.getMonth(); console.log(showYear, showMonth) var options = selectYearElement.getElementsByTagName('option'); for (var i=0; i<options.length; i++) { if ( options[i].value == sy ) { options[i].selected = true; } } var options = selectMonthElement.getElementsByTagName('option'); for (var i=0; i<options.length; i++) { if ( options[i].value == sm ) { options[i].selected = true; } } } } /* * 獲取指定時(shí)間的時(shí)分秒 * */ function getTime(d) { return [ addZero(d.getHours()), addZero(d.getMinutes()), addZero(d.getSeconds()) ].join(':'); } /* * 獲取指定時(shí)間的年月日和星期 * */ function getDate(d) { return d.getFullYear() + '年'+ addZero(d.getMonth() + 1) +'月'+ addZero(d.getDate()) +'日 星期' + getWeek(d.getDay()); } /* * 給數(shù)字加前導(dǎo)0 * */ function addZero(v) { if ( v < 10 ) { return '0' + v; } else { return '' + v; } } /* * 把數(shù)字星期轉(zhuǎn)換成漢字星期 * */ function getWeek(n) { return '日一二三四五六'.split('')[n]; } } </script> </head> <body> <input type="text" id="text1"> <div id="calendar"> <div id="todayTime"></div> <div id="todayDate"></div> <div id="tools"> <div class="l"> <select id="selectYear"></select> 年 <select id="selectMonth"></select> 月 </div> <div class="r"> <span id="prevMonth">∧</span> <span id="nextMonth">∨</span> </div> </div> <table id="showTable"> <thead> <tr> <th>日</th> <th>一</th> <th>二</th> <th>三</th> <th>四</th> <th>五</th> <th>六</th> </tr> </thead> <tbody></tbody> </table> </div> </body> </html>
效果:
以上這篇原生js實(shí)現(xiàn)仿window10系統(tǒng)日歷效果的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
AJAX使用了UpdatePanel后無法使用alert彈出腳本
今天在做項(xiàng)目的時(shí)候發(fā)現(xiàn)個(gè)問題。。使用UpdatePanel后alert腳本就要報(bào)錯(cuò)了。2010-04-04JavaScript實(shí)現(xiàn)手寫原生任務(wù)定時(shí)器
定時(shí)器顧名思義就是在某個(gè)特定的時(shí)間去執(zhí)行一些任務(wù),現(xiàn)代的應(yīng)用程序早已不是以前的那些由簡單的增刪改查拼湊而成的程序了,高復(fù)雜性早已是標(biāo)配,而任務(wù)的定時(shí)調(diào)度與執(zhí)行也是對(duì)程序的基本要求了。本文將利用JavaScript手寫原生任務(wù)定時(shí)器,需要的可以參考一下2022-03-03uniapp小程序配置tabbar底部導(dǎo)航欄實(shí)戰(zhàn)指南
tabBar如果應(yīng)用是一個(gè)多tab應(yīng)用,可以通過tabBar配置項(xiàng)指定tab欄的表現(xiàn),以及tab切換時(shí)顯示的對(duì)應(yīng)頁,下面這篇文章主要給大家介紹了關(guān)于uniapp小程序配置tabbar底部導(dǎo)航欄的相關(guān)資料,需要的朋友可以參考下2022-09-09js使用Promise實(shí)現(xiàn)簡單的Ajax緩存
這篇文章主要介紹了js使用Promise實(shí)現(xiàn)簡單的Ajax緩存,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)倒計(jì)時(shí)的關(guān)鍵代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05javascript實(shí)現(xiàn)的上下無縫滾動(dòng)效果
這篇文章主要介紹了javascript實(shí)現(xiàn)的上下無縫滾動(dòng)效果,具有無縫滾動(dòng)及響應(yīng)鼠標(biāo)滑過停止?jié)L動(dòng)的功能,簡便實(shí)用,需要的朋友可以參考下2016-09-09JavaScript 字符串處理函數(shù)使用小結(jié)
JavaScript 字符串處理函數(shù)使用小結(jié),學(xué)習(xí)js的朋友可以參考下。2010-12-12