激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 原生Js實現日歷掛件

原生Js實現日歷掛件

2022-02-17 19:29清靜清源 js教程

這篇文章主要為大家詳細介紹了原生Js實現日歷掛件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js實現日歷掛件的具體代碼,供大家參考,具體內容如下

Css code

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*************************
 * 日歷樣式對應表
 * #date 日歷塊
 * table 表格
 * th 頭部
 * td 身體
 * a.now 本月
 * a.non-arrival 其他月
 * a.day 今天
 * a.href 鏈接
 * #date_diglogs 記住對話框
 *************************/
 
#date {
 width: 220px;
 padding-bottom: 5px;
 box-shadow: 0 1px 3px #ccc;
 border: 1px solid #EDEDED;
}
 
#date table {
 width: inherit;
 user-select: none;
 font-size: 12px;
 border-collapse: collapse;
 border-spacing: 0px;
}
 
#date table tr th {
 background-color: #f8f8f8;
 color: #5e5f63;
}
 
#date table tr:nth-of-type(2) th {
 font-weight: 300;
}
 
#date table tr td {
 text-align: center;
 font-family: "Comic Sans MS";
 padding: 2px 0;
}
 
#date table tr td a {
 text-decoration: none;
}
 
#date table tr td a.now {
 color: #757575;
}
 
#date table tr td a.day {
 background: mediumblue;
 text-decoration: underline;
 color: #fff;
}
 
#date table tr td a.href {
 border: 1px solid #ccc;
 transition: all 1s linear;
}
 
#date table tr td a.href:hover {
 border: 1px dotted #5E5F63;
 background: gold;
}
 
#date table tr td a.non-arrival {
 color: #ccc;
}
 
.date_diglogs {
 font-size: 10px;
 background: #fff;
 padding: 2px 5px;
 border-radius: 3px;
 box-shadow: 0 1px 3px #ccc;
 border: 1px solid #EDEDED;
 color: #757575;
}

Js code

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
/* 2021/2/26
 * 功能: 日歷掛件
 * 清源妙善
 */
 
function BlogDate(nowDate) {
 /* 可變數據 */
 this.year = nowDate.getFullYear(); // 獲取年份
 this.month = nowDate.getMonth(); // 獲取月份
 this.day = nowDate.getDate(); // 獲取今天是幾號
 this.week = new Date(this.year, this.month, 1).getDay(); // 獲取每月前面的空余天數
 this.days = new Date(this.year, this.month + 1, -1).getDate() + 1; // 獲取總共有幾天
 this.last_month = new Date(this.year, this.month, -1).getDate() + 1; // 保存上個月的天數
 
 /* 不變數據 */
 this.now_year = nowDate.getFullYear(); // 保存今年的年份
 this.now_month = nowDate.getMonth(); // 保存今年的月份
}
 
BlogDate.prototype.createDate = function(name) {
 // 獲取塊與創建表格
 let date_div = document.getElementById('date');
 let date_table = document.createElement('table');
 date_div.appendChild(date_table);
 
 // 創建所有的 tr 標簽
 let date_all_tr = new Array();
 for (let n = 0; n < 8; n++) {
 date_all_tr[n] = document.createElement('tr');
 date_table.appendChild(date_all_tr[n]);
 }
 
 // 創建頭部th標簽
 let date_head_th = new Array();
 for (let n = 0; n < 3; n++) {
 date_head_th[n] = document.createElement('th');
 date_all_tr[0].appendChild(date_head_th[n]);
 }
 
 // 設置特殊元素屬性
 date_head_th[0].setAttribute('id', 'prev');
 date_head_th[1].setAttribute('colspan', '5');
 date_head_th[1].setAttribute('title', `${name}`);
 date_head_th[2].setAttribute('id', 'next');
 
 // 創建星期 th 標簽
 let date_week_th = new Array();
 for (let n = 0; n < 7; n++) {
 date_week_th[n] = document.createElement('th');
 date_all_tr[1].appendChild(date_week_th[n]);
 }
 
 // 創建身體 td, a 標簽數組
 let date_body_td = new Array();
 let date_body_td_a = new Array();
 
 // 創建身體 td, a 標簽實體
 for (let n = 2, i = 0; n < 8; n++, i++) {
 date_body_td[i] = [];
 date_body_td_a[i] = [];
 
 for (let m = 0; m < 7; m++) {
 date_body_td[i][m] = document.createElement('td');
 date_body_td_a[i][m] = document.createElement('a');
 date_body_td[i][m].appendChild(date_body_td_a[i][m]);
 date_all_tr[n].append(date_body_td[i][m]);
 }
 }
}
 
BlogDate.prototype.setBlogDate = function(newDate) {
 /* 更新數據 */
 this.year = newDate.getFullYear(); // 獲取年份
 this.month = newDate.getMonth(); // 獲取月份
 this.day = newDate.getDate(); // 獲取今天是幾號
 this.week = new Date(this.year, this.month, 1).getDay(); // 獲取每月前面的空余天數
 this.days = new Date(this.year, this.month + 1, -1).getDate() + 1; // 獲取總共有幾天
 this.last_month = new Date(this.year, this.month, -1).getDate() + 1; // 獲取上個月的天數
}
 
BlogDate.prototype.updateTime = function(blogs_date) {
 // 獲取日歷對象
 let date_div = document.getElementById('date');
 let date_table = date_div.getElementsByTagName('table')[0];
 
 // 創建日歷頭部 tr, th
 let date_head_tr = date_table.getElementsByTagName('tr')[0];
 let date_head_th = date_head_tr.getElementsByTagName('th');
 
 // 創建頭部數據
 let date_head_arr = [
 '<', `${this.year} 年 ${this.month + 1} 月`, '>'
 ];
 
 // 更新頭部數據
 for (let n = 0; n < date_head_th.length; n++) {
 date_head_th[n].textContent = date_head_arr[n];
 }
 
 // 創建星期部分 tr, th
 let date_week_tr = date_table.getElementsByTagName('tr')[1];
 let date_week_th = date_week_tr.getElementsByTagName('th');
 
 // 創建星期數據
 let date_week_arr = [
 '日', '一', '二', '三', '四', '五', '六'
 ];
 
 // 更新星期數據
 for (let n = 0; n < date_week_th.length; n++) {
 date_week_th[n].textContent = date_week_arr[n];
 }
 
 // 獲取身體 td 的 a 標簽
 let date_body_td_a = date_table.getElementsByTagName('a');
 
 // 設置其他月份的天數 ( 前 )
 for (let n = this.week - 1, last_month = this.last_month; n >= 0; n--, last_month--) {
 date_body_td_a[n].textContent = last_month;
 date_body_td_a[n].setAttribute('class', 'non-arrival');
 }
 
 // 設置現在月份的天數 ( 現 )
 for (let n = this.week, i = 1; i <= this.days; n++, i++) {
 date_body_td_a[n].textContent = i;
 // 如果今年今月今日, 設置 day 樣式, 其余 now 樣式
 if ((i == this.day) &&
 (new Date(this.year, this.month, 1).getMonth() == this.now_month) &&
 (new Date(this.year, this.month, 1).getFullYear() == this.now_year)) {
 date_body_td_a[n].setAttribute('class', 'day');
 } else {
 date_body_td_a[n].setAttribute('class', 'now');
 }
 }
 
 // 設置其他月份的天數 ( 后 )
 for (let n = this.week + this.days, i = 1; n < date_body_td_a.length; n++, i++) {
 date_body_td_a[n].textContent = i;
 date_body_td_a[n].setAttribute('class', 'non-arrival');
 }
 
 // 如果鏈接部分日期數據相同, 設置對應樣式
 for (let n = 0; n < date_body_td_a.length; n++) {
 for (let m = 0; m < blogs_date.href_num; m++) {
 if ((this.year == blogs_date.href_year[m]) &&
 (this.month + 1 == blogs_date.href_month[m]) &&
 (n == blogs_date.href_day[m])) {
 date_body_td_a[n].setAttribute('href', blogs_date.href_url[m]);
 date_body_td_a[n].classList.add('href');
 date_body_td_a[n].setAttribute('target', '_blank');
 } else {
 // 如果不是則判斷是否存在多余屬性
 if (Boolean(date_body_td_a[n].getAttribute('target')) &&
 Boolean(date_body_td_a[n].getAttribute('href')) &&
 (date_body_td_a[n].getAttribute('class') == 'now' ||
 date_body_td_a[n].getAttribute('class') == 'non-arrival')) {
 date_body_td_a[n].removeAttribute('href');
 date_body_td_a[n].removeAttribute('target');
 }
 }
 }
 }
}
 
function initDate(
 // 默認日歷參數表
 blogs_date = {
 blogs_name: '我的日歷',
 href_year: [2021],
 href_month: [2],
 href_day: [26],
 href_url: ['http://www.4399.com/'],
 href_prompt: ['這是我編寫的日歷掛件'],
 href_dialog: false,
 href_num: undefined
 }
) {
 // 參數長度是否相等
 if ((blogs_date.href_day.length != blogs_date.href_month.length) ||
 (blogs_date.href_month.length != blogs_date.href_year.length) ||
 (blogs_date.href_year.length != blogs_date.href_url.length)) {
 console.info('日歷參數長度不等');
 return false;
 }
 // 參數長度相同, 設置對應長度
 else {
 blogs_date.href_num = blogs_date.href_day.length;
 }
 
 // 創建日歷數據
 let timeDate = new Date();
 let blogDate = new BlogDate(timeDate);
 
 // 創建日歷實體
 blogDate.createDate(blogs_date.blogs_name);
 blogDate.updateTime(blogs_date);
 
 // 添加 prev 事件
 document.getElementById('prev').onclick = function() {
 timeDate.setMonth(timeDate.getMonth() - 1);
 blogDate.setBlogDate(timeDate);
 blogDate.updateTime(blogs_date);
 }
 
 // 添加 next 事件
 document.getElementById('next').onclick = function() {
 timeDate.setMonth(timeDate.getMonth() + 1);
 blogDate.setBlogDate(timeDate);
 blogDate.updateTime(blogs_date);
 }
 
 openDialogs(blogs_date);
 
 showBlogsData(blogs_date, timeDate);
}
 
function showBlogsData(blogs_date, now) {
 for (let k in blogs_date) {
 console.info(`[${k}] : ${blogs_date[k]}`);
 }
 console.info(`BlogsDate Ok ${now}`);
}
 
function openDialogs(blogs_date) {
 // 是否開啟對話框
 switch (blogs_date.href_dialog) {
 case true:
 let hrefId = document.getElementsByClassName('href');
 for (let n = 0; n < hrefId.length; n++) {
 hrefId[n].onmouseover = function(e) {
 if (this.getAttribute('class') != 'now' &&
 this.getAttribute('class') != 'non-arrival') {
 
 var e = e || window.event;
 
 let x = e.clientX;
 let y = e.clientY;
 
 let prompt = blogs_date.href_prompt[n];
 let dialogs = document.createElement('div');
 
 dialogs.classList.add('date_diglogs');
 dialogs.textContent = prompt;
 dialogs.style.cssText = `position: absolute;
 left: ${x-20}px;
 top: ${y+20}px`;
 
 document.body.appendChild(dialogs);
 }
 }
 hrefId[n].onmouseout = function() {
 if (this.getAttribute('class') != 'now' &&
 this.getAttribute('class') != 'non-arrival') {
 
 let diglogs = document.getElementsByClassName('date_diglogs')[0];
 document.body.removeChild(diglogs);
 }
 }
 }
 break;
 case false:
 break;
 }
}

Html code

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>date html</title>
 <link rel="stylesheet" href="date.css" media="screen">
 </head>
 <body>
 <h3>Hello</h3>
 <div id="date"></div>
 <script src="date.js"></script>
 <script>
 initDate(blogs_date = {
 blogs_name : '我的日歷',
 href_year : [2021, 2021],
 href_month : [2, 2],
 href_day : [27, 3],
 href_url : ['http://www.4399.com/', 'http://www.baidu.com/'],
 href_prompt: ['今天要出門看親人', '今天要早睡'],
 href_dialog: true
 });
 </script>
 </body>
</html>

效果

原生Js實現日歷掛件

參考鏈接:jquery實現日歷效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_35068659/article/details/114126238

延伸 · 閱讀

精彩推薦
  • js教程微信小程序tab左右滑動切換功能的實現代碼

    微信小程序tab左右滑動切換功能的實現代碼

    這篇文章主要介紹了微信小程序tab左右滑動切換功能的實現代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可...

    壞蛋先生5352022-01-19
  • js教程JavaScript實現H5接金幣功能(實例代碼)

    JavaScript實現H5接金幣功能(實例代碼)

    這篇文章主要介紹了JavaScript實現H5接金幣功能,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友...

    AloneSundy4282022-01-22
  • js教程js實現Element中input組件的部分功能并封裝成組件(實例代碼)

    js實現Element中input組件的部分功能并封裝成組件(實例代碼)

    這篇文章主要介紹了純生js實現Element中input組件的部分功能(慢慢完善)并封裝成組件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借...

    背著泰山找黃河10672022-01-25
  • js教程Javascript實現漢字和拼音互轉的終極方案

    Javascript實現漢字和拼音互轉的終極方案

    網上關于JS實現漢字和拼音互轉的文章很多,但是比較雜亂,有的不支持多音字、不支持聲調或者字典文件太大,無法根據實際需要滿足需求。這篇文章給...

    我是小茗同學10422021-12-15
  • js教程JavaScript實現消消樂的源代碼

    JavaScript實現消消樂的源代碼

    這篇文章主要介紹了JavaScript實現消消樂-源代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以...

    代碼100分12182021-12-30
  • js教程原生JS實現京東查看商品點擊放大

    原生JS實現京東查看商品點擊放大

    這篇文章主要為大家詳細介紹了原生JS實現京東查看商品點擊放大,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    A.香辣雞腿堡7262021-12-15
  • js教程JS代碼實現頁面切換效果

    JS代碼實現頁面切換效果

    這篇文章主要為大家詳細介紹了JS代碼實現頁面切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    _Adoph9342021-12-29
  • js教程選擇 JavaScript 測試框架的標準

    選擇 JavaScript 測試框架的標準

    由于 JavaScript 被廣泛認為是“web語言”,因此該語言的測試自動化框架是最豐富和最受歡迎的也就不足為奇了。通過考慮不同框架的屬性,你將更加清楚哪...

    粵嵌教育6962022-01-07
主站蜘蛛池模板: 一区二区久久久久草草 | 日韩欧美电影在线观看 | 欧美日韩在线视频一区 | 暖暖免费观看高清完整版电影 | 国产一级大片 | 在线播放91 | 韩国精品一区二区三区四区五区 | 91色一区二区三区 | 日韩专区在线 | 成人勉费视频 | 一级免费黄视频 | 久国产 | 国产一区在线观看视频 | 蜜桃精品视频 | 进去了(高h) | 久久国产精品影视 | 康妮卡特欧美精品一区 | 黄网站色成年大片免费高 | 一级电影中文字幕 | 日韩中文字幕一区二区三区 | 最新福利在线 | 久久久久久久久浪潮精品 | 爽爽淫人综合网网站 | 欧美1区2区在线观看 | 99久久久精品免费观看国产 | 91av在线国产 | www成人在线观看 | 最新中文在线视频 | 摸逼逼视频 | 久久55| 欧美韩国日本在线 | 一边吃奶一边摸下娇喘 | 羞羞视频免费网站含羞草 | 午夜视频在线观 | 国产亚洲精品视频中文字幕 | 天天夜夜操操 | 久久久毛片视频 | jizzjizz中国人少妇中文 | 成人精品 | av在线播放免费 | 日韩av在线播放一区 |