原生js实现仿window10系统日历效果

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

  该日历主要实现了获取当前时间时分秒,年月日星期,动态生成选择年的select,月的select,然后根据你所选中的年月,显示该年月对应的这一个月的日期。点击上一个月,下一个月按钮,在下拉列表中显示对应的年月
1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Title</title>
  6     <style>
  7         #calendar {
  8             position: absolute;
  9             padding: 5px;
 10             border: 1px solid #000000;
 11             background: #8f3349;
 12             display: none;
 13         }
 14
 15         #todayTime {
 16             padding: 5px 0;
 17             font-size: 40px;
 18             color: white;
 19         }
 20         #todayDate {
 21             padding: 5px 0;
 22             font-size: 24px;
 23             color: #ffcf88;
 24         }
 25         #tools {
 26             padding: 5px 0;
 27             height: 30px;
 28             color: white;
 29         }
 30         #tools .l {
 31             float: left;
 32         }
 33         #tools .r {
 34             float: right;
 35         }
 36         table {
 37             width: 100%;
 38             color: white;
 39         }
 40         table th {
 41             color: #a2cbf3;
 42         }
 43         table td {
 44             text-align: center;
 45             cursor: default;
 46         }
 47         table td.today {
 48             background: #cc2951;
 49             color: white;
 50         }
 51     </style>
 52     <script>
 53         window.onload = function() {
 54
 55             var text1 = document.getElementById(‘text1‘);
 56
 57             text1.onfocus = function() {
 58                 calendar();
 59             }
 60
 61 //            calendar();
 62
 63             function calendar() {
 64
 65                 var calendarElement = document.getElementById(‘calendar‘);
 66                 var todayTimeElement = document.getElementById(‘todayTime‘);
 67                 var todayDateElement = document.getElementById(‘todayDate‘);
 68                 var selectYearElement = document.getElementById(‘selectYear‘);
 69                 var selectMonthElement = document.getElementById(‘selectMonth‘);
 70                 var showTableElement = document.getElementById(‘showTable‘);
 71                 var prevMonthElement = document.getElementById(‘prevMonth‘);
 72                 var nextMonthElement = document.getElementById(‘nextMonth‘);
 73
 74                 calendarElement.style.display = ‘block‘;
 75
 76                 /*
 77                  * 获取今天的时间
 78                  * */
 79                 var today = new Date();
 80
 81                 //设置日历显示的年月
 82                 var showYear = today.getFullYear();
 83                 var showMonth = today.getMonth();
 84
 85                     //持续更新当前时间
 86                 updateTime();
 87
 88                 //显示当前的年月日星期
 89                 todayDateElement.innerHTML = getDate(today);
 90
 91                 //动态生成选择年的select
 92                 for (var i=1970; i<2020; i++) {
 93                     var option = document.createElement(‘option‘);
 94                     option.value = i;
 95                     option.innerHTML = i;
 96                     if ( i == showYear ) {
 97                         option.selected = true;
 98                     }
 99                     selectYearElement.appendChild(option);
100                 }
101                 //动态生成选择月的select
102                 for (var i=1; i<13; i++) {
103                     var option = document.createElement(‘option‘);
104                     option.value = i - 1;
105                     option.innerHTML = i;
106                     if ( i == showMonth + 1 ) {
107                         option.selected = true;
108                     }
109                     selectMonthElement.appendChild(option);
110                 }
111
112                 //初始化显示table
113                 showTable();
114
115                 //选择年
116                 selectYearElement.onchange = function() {
117                     showYear = this.value;
118                     showTable();
119                     showOption();
120                 }
121
122                 //选择月
123                 selectMonthElement.onchange = function() {
124                     showMonth = Number(this.value);
125                     showTable();
126                     showOption();
127                 }
128
129                 //上一个月
130                 prevMonthElement.onclick = function() {
131                     showMonth--;
132                     showTable();
133                     showOption();
134                 }
135
136                 //下一个月
137                 nextMonthElement.onclick = function() {
138                     showMonth++;
139                     showTable();
140                     showOption();
141                 }
142
143
144                 /*
145                 * 实时更新当前时间
146                 * */
147                 function updateTime() {
148                     var timer = null;
149                     //每个500毫秒获取当前的时间,并把当前的时间格式化显示到指定位置
150                     var today = new Date();
151                     todayTimeElement.innerHTML = getTime(today);
152                     timer = setInterval(function() {
153                         var today = new Date();
154                         todayTimeElement.innerHTML = getTime(today);
155                     }, 500);
156                 }
157
158                 function showTable() {
159                     showTableElement.tBodies[0].innerHTML = ‘‘;
160                     //根据当前需要显示的年和月来创建日历
161                     //创建一个要显示的年月的下一个的日期对象
162                     var date1 = new Date(showYear, showMonth+1, 1, 0, 0, 0);
163                     //对下一个月的1号0时0分0秒的时间 - 1得到要显示的年月的最后一天的时间
164                     var date2 = new Date(date1.getTime() - 1);
165                     //得到要显示的年月的总天数
166                     var showMonthDays = date2.getDate();
167                     //获取要显示的年月的1日的星期,从0开始的星期
168                     date2.setDate(1);
169                     //showMonthWeek表示这个月的1日的星期,也可以作为表格中前面空白的单元格的个数
170                     var showMonthWeek = date2.getDay();
171
172                     var cells = 7;
173                     var rows = Math.ceil( (showMonthDays + showMonthWeek) / cells );
174
175                     //通过上面计算出来的行和列生成表格
176                     //没生成一行就生成7列
177                     //行的循环
178                     for ( var i=0; i<rows; i++ ) {
179
180                         var tr = document.createElement(‘tr‘);
181
182                         //列的循环
183                         for ( var j=0; j<cells; j++ ) {
184
185                             var td = document.createElement(‘td‘);
186
187                             var v = i*cells + j - ( showMonthWeek - 1 );
188
189                             //根据这个月的日期控制显示的数字
190                             //td.innerHTML = v;
191                             if ( v > 0 && v <= showMonthDays  ) {
192
193                                 //高亮显示今天的日期
194                                 if ( today.getFullYear() == showYear && today.getMonth() == showMonth && today.getDate() == v ) {
195                                     td.className = ‘today‘;
196                                 }
197
198                                 td.innerHTML = v;
199                             } else {
200                                 td.innerHTML = ‘‘;
201                             }
202
203                             td.ondblclick = function() {
204                                 calendarElement.style.display = ‘none‘;
205
206                                 text1.value = showYear + ‘年‘ + (showMonth+1) + ‘月‘ + this.innerHTML + ‘日‘;
207                             }
208
209                             tr.appendChild(td);
210
211                         }
212
213                         showTableElement.tBodies[0].appendChild(tr);
214
215                     }
216                 }
217
218                 function showOption() {
219
220                     var date = new Date(showYear, showMonth);
221                     var sy = date.getFullYear();
222                     var sm = date.getMonth();
223                     console.log(showYear, showMonth)
224
225                     var options = selectYearElement.getElementsByTagName(‘option‘);
226                     for (var i=0; i<options.length; i++) {
227                         if ( options[i].value == sy ) {
228                             options[i].selected = true;
229                         }
230                     }
231
232                     var options = selectMonthElement.getElementsByTagName(‘option‘);
233                     for (var i=0; i<options.length; i++) {
234                         if ( options[i].value == sm ) {
235                             options[i].selected = true;
236                         }
237                     }
238                 }
239             }
240
241             /*
242              * 获取指定时间的时分秒
243              * */
244             function getTime(d) {
245                 return [
246                     addZero(d.getHours()),
247                     addZero(d.getMinutes()),
248                     addZero(d.getSeconds())
249                 ].join(‘:‘);
250             }
251
252             /*
253             * 获取指定时间的年月日和星期
254             * */
255             function getDate(d) {
256                 return d.getFullYear() + ‘年‘+ addZero(d.getMonth() + 1) +‘月‘+ addZero(d.getDate()) +‘日 星期‘ + getWeek(d.getDay());
257             }
258
259             /*
260             * 给数字加前导0
261             * */
262             function addZero(v) {
263                 if ( v < 10 ) {
264                     return ‘0‘ + v;
265                 } else {
266                     return ‘‘ + v;
267                 }
268             }
269
270             /*
271             * 把数字星期转换成汉字星期
272             * */
273             function getWeek(n) {
274                 return ‘日一二三四五六‘.split(‘‘)[n];
275             }
276
277         }
278     </script>
279 </head>
280 <body>
281
282 <input type="text" id="text1">
283
284     <div id="calendar">
285
286         <div id="todayTime"></div>
287         <div id="todayDate"></div>
288
289         <div id="tools">
290             <div class="l">
291                 <select id="selectYear"></select> 年
292                 <select id="selectMonth"></select> 月
293             </div>
294             <div class="r">
295                 <span id="prevMonth">∧</span>
296                 <span id="nextMonth">∨</span>
297             </div>
298         </div>
299
300         <table id="showTable">
301             <thead>
302                 <tr>
303                     <th>日</th>
304                     <th>一</th>
305                     <th>二</th>
306                     <th>三</th>
307                     <th>四</th>
308                     <th>五</th>
309                     <th>六</th>
310                 </tr>
311             </thead>
312             <tbody></tbody>
313         </table>
314
315     </div>
316
317 </body>
318 </html>

效果:

ps:有什么好的想法和思路可以共同交流成长。群号前端开发学习交流群 486867012

时间: 2024-08-25 15:49:56

原生js实现仿window10系统日历效果的相关文章

利用原生JS实现网页1920banner图滚动效果

内容描述:随着PC设备硬件性能的进步和分辨率的不断提高,现在主流网站逐渐开始采用1920banner图,为适应这一趋势,博主设计了1920banner图的滚动效果,代码利用了原生JS实现了1920banner图的切换效果,并针对低分辨率电脑设备进行了适配,实现了JS代码与HTML代码的完全分离,符合w3c的标准使用规范,希望能给各位开发者朋友以帮助和参考.如发现有缺陷和不足,欢迎大家予以指正,如有更好的意见或解决方法,可在评论区交流互动.一下为代码内容: <!DOCTYPE html> <

原生js点击轮播图效果

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> <title>原生js轮播效果</title&g

原生 JS 代码和用 jQuery 实现效果各有什么优劣势

通过自己的理解再加上自己收集的一些资料总结如下: 各種封裝,主要目的就是爲了省心,拿jq來說: JQ对不同浏览器的事件,DOM对象,都进行了封装,各种操作都可以直接兼容各种浏览器, 要知道, 不同浏览器的区别不仅仅是在CSS里写"-webkit-"还是"filter"的区别, 连事件模型这种底层的东西都不一样= = JQ特有的CSS-LIKE选择器, 链式写法, 封装的各类animate函数, 封装了的异步加载, 都大幅提高了开发效率, 减少重复劳动 JQ用dela

原生js实现tooltip提示框的效果

在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我,只是随机一瞟,便看到了这个tooltip的特效,就有一种想要征服它的愿望. 比如这个tooltip的效果展示: 这个便是tooltip提示框的效果. 在Hbulider上的代码展示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8

原生js实现简单的焦点图效果

用到一些封装好的运动函数,主要是定时器 效果为图片和图片的描述定时自动更换 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> ul, li, p, h3 { padding: 0; margin: 0; list-style: none; } img

js实现仿购物车加减效果

代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> *{ margin: 0; padding: 0; } body{ overflow-y: auto; } ul{ margin-top: 20px; border-top: 1px solid #666; } h1{ width: 500

原生JS返回顶部,带返回效果

有些网站当滑到一定高度时右下角会有一个按钮,你只要一点就可以直接返回顶部了.那这个功能是怎么做到的呢.其实不算太难: 首先我们先在网页中创建一个按钮,上面写上返回顶部,把它的样式改成固定定位,之后想要什么样式都可以自己写上,再在上面设置一个id: 之后我们js中获取一下这个按钮的id,并且定义一个变量timer,方便接下来清除间隔器: 之后我们设置一个页面的滚动事件,在里面定义一个变量获取一下所滚动的高度: 再用一个判断语句来判断一下滚动的高度:我们在设置一个数来让按钮什么时候显示: var o

原生js实现一个简单轮播效果

代码简单,直接上: <!DOCTYPE html> <html> <head> <title>轮播</title> <meta charset="utf-8"> <style type="text/css"> *{ padding:0; margin:0; } .mainCss{ width:100px; height: 200px; position: relative; over

原生js实现的效果

原生js实现tooltip提示框的效果 在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我,只是随机一瞟,便看到了这个tooltip的特效,就有一种想要征服它的愿望. 比如这个tooltip的效果展示: 这个便是tooltip提示框的效果. 在Hbulider上的代码展示: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta