视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
原生js实现仿window10系统日历效果的实例
2020-11-27 22:26:21 责编:小采
文档


舞动的灵魂版js日历,完全采用js实现,故而实现了与语言无关,jsp、asp.net php asp均可使用.无论你是开发软件,还是网站,均是不可或缺的实用代码。

该日历主要实现了获取当前时间时分秒,年月日星期,动态生成选择年的select,月的select,然后根据你所选中的年月,显示该年月对应的这一个月的日期。

点击上一个月,下一个月按钮,在下拉列表中显示对应的年月。

 <!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';

 /*
 * 获取今天的时间
 * */
 var today = new Date();

 //设置日历显示的年月
 var showYear = today.getFullYear();
 var showMonth = today.getMonth();

 //持续更新当前时间
 updateTime();

 //显示当前的年月日星期
 todayDateElement.innerHTML = getDate(today);

 //动态生成选择年的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);
 }
 //动态生成选择月的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();
 }

 //上一个月
 prevMonthElement.onclick = function() {
 showMonth--;
 showTable();
 showOption();
 }

 //下一个月
 nextMonthElement.onclick = function() {
 showMonth++;
 showTable();
 showOption();
 }


 /*
 * 实时更新当前时间
 * */
 function updateTime() {
 var timer = null;
 //每个500毫秒获取当前的时间,并把当前的时间格式化显示到指定位置
 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 = '';
 //根据当前需要显示的年和月来创建日历
 //创建一个要显示的年月的下一个的日期对象
 var date1 = new Date(showYear, showMonth+1, 1, 0, 0, 0);
 //对下一个月的1号0时0分0秒的时间 - 1得到要显示的年月的最后一天的时间
 var date2 = new Date(date1.getTime() - 1);
 //得到要显示的年月的总天数
 var showMonthDays = date2.getDate();
 //获取要显示的年月的1日的星期,从0开始的星期
 date2.setDate(1);
 //showMonthWeek表示这个月的1日的星期,也可以作为表格中前面空白的单元格的个数
 var showMonthWeek = date2.getDay();

 var cells = 7;
 var rows = Math.ceil( (showMonthDays + showMonthWeek) / cells );

 //通过上面计算出来的行和列生成表格
 //没生成一行就生成7列
 //行的循环
 for ( var i=0; i<rows; i++ ) {

 var tr = document.createElement('tr');

 //列的循环
 for ( var j=0; j<cells; j++ ) {

 var td = document.createElement('td');

 var v = i*cells + j - ( showMonthWeek - 1 );

 //根据这个月的日期控制显示的数字
 //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;
 }
 }
 }
 }

 /*
 * 获取指定时间的时分秒
 * */
 function getTime(d) {
 return [
 addZero(d.getHours()),
 addZero(d.getMinutes()),
 addZero(d.getSeconds())
 ].join(':');
 }

 /*
 * 获取指定时间的年月日和星期
 * */
 function getDate(d) {
 return d.getFullYear() + '年'+ addZero(d.getMonth() + 1) +'月'+ addZero(d.getDate()) +'日 星期' + getWeek(d.getDay());
 }

 /*
 * 给数字加前导0
 * */
 function addZero(v) {
 if ( v < 10 ) {
 return '0' + v;
 } else {
 return '' + v;
 }
 }

 /*
 * 把数字星期转换成汉字星期
 * */
 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实现仿window10系统日历效果的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

下载本文
显示全文
专题