主頁 > 前端設計 > vue自定義日期選擇,類似美團日期選擇,日歷控制元件,vue日歷區間選擇

vue自定義日期選擇,類似美團日期選擇,日歷控制元件,vue日歷區間選擇

2020-09-13 01:07:02 前端設計

一個日歷的控制元件,基于vue的,可以日歷區間選擇,可用于酒店日歷區間篩選,動手能力強,可以修改成小程式版本的,先上效果圖

 

里面的顏色樣式都是可以修改的

 

選擇范圍效果

 

話不多說,直接上干貨,代碼可以直接復制訪問

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
  6     <meta name="renderer" content="webkit">
  7     <title></title>
  8 </head>
  9 <style>
 10 html,body{padding:0;margin:0;height:100%;}
 11 .header{
 12    width:100%;
 13    height:40px;
 14    text-align: center;
 15    position: relative;
 16    line-height: 40px;
 17 }
 18 .body{
 19    width: 100%;
 20    height:87%;
 21    height: -moz-calc(100% - 80px);
 22    height: -webkit-calc(100% - 80px);
 23    height: calc(100% - 80px);
 24    overflow-y: auto;
 25    position:absolute;
 26 }
 27 .golbal-left{
 28    width: 13px;
 29    height: 13px;
 30    border-top: 2px solid gainsboro;
 31    border-right: 2px solid gainsboro;
 32    transform: rotate(225deg);
 33    -webkit-transform: rotate(225deg);
 34    position: absolute;
 35    left: 16px;
 36    top: 15px;
 37 }
 38 .calendar {
 39   width: 100vw;
 40   text-align: center;
 41 }
 42 .week-title {
 43   overflow: hidden;
 44   position: fixed;
 45   margin-bottom: 1.5rem;
 46   background-color: #f6f6f8;
 47   z-index: 2;
 48 }
 49 .week-title>div {
 50   width: 14.28vw;
 51   height: 2rem;
 52   line-height: 2rem;
 53   float: left;
 54 }
 55 .box {
 56   position: absolute;
 57   top: 2rem;
 58   z-index: 1;
 59 }
 60 .data-title {
 61   height: 2rem;
 62   line-height: 2rem;
 63   border-top: 1px solid #ededed;
 64   border-bottom: 1px solid #ededed;
 65   clear: both;
 66 }
 67 .calendar-data {
 68   width: 100vw;
 69   clear: both;
 70 }
 71 .day {
 72   width: 14.28vw;
 73   height: 3rem;
 74   line-height: 1.6rem;
 75   float: left;
 76   display: flex;
 77   flex-direction: column;
 78 }
 79 .day.disabled{
 80   color:#ddd;
 81 }
 82 .active-start {
 83   color: white;
 84   background-color: #30b6af;
 85 }
 86 .active-start::after {
 87   content: '入住';
 88   font-size: .5rem;
 89 }
 90 .active {
 91   color: white;
 92   background-color: rgba(63,182,175,.5);
 93 }
 94 .active-end {
 95   color: white;
 96   background-color: #30b6af;
 97   position: relative;
 98 }
 99 .active-end::after {
100   content: '離開';
101   font-size: .5rem;
102 }
103 .active-end i{
104     position: absolute;
105     top:-120%;
106     width:100%;
107     height:100%;
108     background:rgba(0,0,0,1);
109     opacity:0.6;
110     border-radius:8px;
111     display: flex;
112     align-items: center;
113     justify-content: center;
114     font-style: normal;
115     font-size: 15px;
116     color:#fff;
117 }
118 .active-end i::after{
119     position: absolute;
120     content: '';
121     float: left;
122     width: 0; 
123     height: 0;
124     border-width: 10px;
125     border-style: solid;
126     border-color:#000 transparent transparent transparent;
127     opacity:1;
128     bottom:-20px;
129     left:50%;
130     margin-left:-10px;
131 }
132 .screenbottom{
133    height:35px;
134    width:100%;
135    display: flex;
136 }
137 .reset{
138    width:50%;
139    height:40px;
140    line-height: 40px;
141    color:#3E3E3E;
142    text-align: center;
143    background: #fff;
144 }
145 .determine{
146    width:50%;
147    height:40px;
148    line-height: 40px;
149    background: #48D8BF;
150    color:#fff;
151    text-align: center;
152 }
153 footer{
154     position: fixed;
155     bottom:0;
156     width:100%;
157 }
158 [v-cloak] 
159 {
160     display: none;
161 }
162 </style>
163 <body>
164     <div id='app' v-cloak>
165         <header class="header">
166           <span>時間范圍</span>
167         </header>
168         <div class="body">
169             <div class='calendar'>
170                 <div class='week-title'>
171                     <div></div>
172                     <div></div>
173                     <div></div>
174                     <div></div>
175                     <div></div>
176                     <div></div>
177                     <div></div>
178                 </div>
179                 <div class='box'>
180                     <div class='calendar-body'>
181                         <div v-for="(item,index) in calendar">
182                             <!-- 標題 -->
183                             <div class='data-title'>
184                                 {{item.fullYear + '年' + item.fullMonth+'月'}}
185                             </div>
186                             <!-- 日期 -->
187                             <div class='calendar-data'>
188                                 <div class="day"                      
189                                 :class="item2.disabled + ' '+ item2.disabled2 + ' ' +item2.start_date + ' ' + item2.end_date +' ' + item2.active_date"  
190                                 v-for="(item2,index) in item.days" 
191                                 @click="selectDate(item2)">
192                                     {{item2.day}}
193                                 </div>
194                             </div>
195                         </div>
196                     </div>
197                 </div>
198             </div>
199         </div>
200         <footer>
201             <div class="screenbottom">
202                 <div class="reset">取消</div>
203                 <div class="determine">確定</div>
204             </div>
205         </footer>        
206     </div>
207 </body>
208 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
209  <script type="text/javascript">
210     let vm = new Vue({
211          el:'#app',
212          data:{
213             start:'',              //開始時間,從當天開始,
214             calendar:[],
215             month_length: 6,       //最長預定多少個月后的房間  讀取總店配置,
216             max_reserve_days: 0,   //最長預定天數,,一個月按30天計劃
217             max_reserve_date: '',  //最長可預定的日期,例如:2019-09-12
218             select_start_ymd : '', //入住開始提交時間  例如:2019-5-8
219             select_start_show: '', //入住開始顯示時間  例如:05月08日
220             select_end_ymd: '',    //離店開始提交時間  例如:2019-5-8
221             select_end_show: '',   //離店開始顯示時間  例如:05月08日
222             select_index:'start',  //記錄當前點擊時間,所對應的時間是開始時間還是結束時間
223             select_all_day:''
224          },
225          methods:{
226            initDate:function(){
227                 var _this = this;
228                 // 創建時間物件
229                 let date = new Date();
230                 //如果當前時間為凌晨6點前,則當前日期往前一天
231                 if (date.getHours() < 6) {
232                     date = new Date(date.getTime() - 86400 * 1000);
233                 }
234                 // 獲取完整年月
235                 let fullDate = [
236                     date.getFullYear(),
237                     date.getMonth() + 1,
238                     date.getDate(),
239                     date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
240                 ];
241                 /**
242                  * 從快取拿已經設定的開始和結束日期
243                  * 如果第一次用戶是第一次進入,則設定默認值為,并且保存進快取,
244                  */
245                 var select_start_ymd = '';
246                 var select_start_ymd_show = '';
247                 var select_end_ymd = '';
248                 var select_end_ymd_show = '';
249 
250                 if (select_start_ymd == '' || select_start_ymd == undefined || select_start_ymd == 'undefined' || _this.compareDate(select_start_ymd, fullDate[3]) == 3) {
251                     select_start_ymd = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
252                     select_start_ymd_show = _this.parseMonth(date.getMonth() + 1) + '' + _this.parseDay(date.getDate()) + '';
253                 }
254 
255                 if (select_end_ymd == '' || select_end_ymd == undefined || select_end_ymd == 'undefined' || _this.compareDate(select_end_ymd, fullDate[3]) == 3) {
256                     let temp_date = new Date(date.getTime() + 86400 * 1000)
257                     select_end_ymd = temp_date.getFullYear() + '-' + (temp_date.getMonth() + 1) + '-' + temp_date.getDate();
258                     select_end_ymd_show = _this.parseMonth(temp_date.getMonth() + 1) + '' + _this.parseDay(temp_date.getDate()) + '';
259                 }
260                 //設定資料,并且保存快取
261                 _this.select_start_ymd = select_start_ymd
262                 _this.select_end_ymd = select_end_ymd
263 
264                 //通過月份,計劃最長可預定天數和日期  ,最后一天為離店時間,所以多加一天可選擇
265                 let max_reserve_days = _this.month_length * 30 + 1;
266 
267                 //最大天數轉換成毫秒數,再轉換成時間
268                 let max_date = new Date(date.getTime() + max_reserve_days * 24 * 60 * 60 * 1000);
269                 let max_reserve_date = max_date.getFullYear() + '-' + (max_date.getMonth() + 1) + '-' + max_date.getDate() + '';
270                 _this.max_reserve_days = max_reserve_days
271                 _this.max_reserve_date = max_reserve_date
272 
273                 //獲取當前月份完整日期天數
274                 let cur_month_date = new Date(fullDate[0] + '-' + _this.parseMonth(fullDate[1]) + '-01')
275                 let cur_month = {};
276                 cur_month.fullYear = fullDate[0]; //
277                 cur_month.fullMonth = fullDate[1];  //
278                 cur_month.dayLength = _this.getMonthDays(cur_month.fullMonth, cur_month.fullYear);//當前月份總共有多少天
279                 cur_month.firstDayWeek = cur_month_date.getDay();  //當前月份第一天星期幾0~7
280                 cur_month.curDay = date.getDate(); //當前天
281                 cur_month.days = [];
282                 //初始化天數
283                 var item = {};
284                 for (let i = 1; i <= cur_month.dayLength; i++) {
285                     item = {
286                         ymd: cur_month.fullYear + '-' + cur_month.fullMonth + '-' + i,
287                         ymd_cn: _this.parseMonth(cur_month.fullMonth) + '' + _this.parseDay(i) + '',
288                         day: i,
289                         disabled: i < cur_month.curDay ? 'disabled' : '',
290                     };
291                     //開始時間
292                     item.start_date = _this.compareDate(_this.select_start_ymd, item.ymd) == 2 ? 'active-start' : '';
293                     //中間的日期
294                     item.active_date = (_this.compareDate(_this.select_start_ymd, item.ymd) == 3 && _this.compareDate(_this.select_end_ymd, item.ymd) == 1) ? 'active' : '';
295                     //結束時間
296                     item.end_date = _this.compareDate(_this.select_end_ymd, item.ymd) == 2 ? 'active-end' : '';
297                     //超過設定最長日期,禁止選擇
298                     item.disabled2 = _this.compareDate(max_reserve_date, item.ymd) == 3 ? 'disabled' : '';
299                     cur_month['days'].push(item);
300                 }
301 
302                 //前補0
303                 if (cur_month.firstDayWeek > 0) {
304                     for (let i = 0; i < cur_month.firstDayWeek; i++) {
305                         cur_month['days'].unshift('');
306                     }
307                 }
308 
309                 _this.calendar.push(cur_month)
310 
311                 var next_month_date;
312                 var nextfullDate = [];
313                 for (let i2 = 0; i2 < _this.month_length; i2++) {
314                     //下一個朋的天數資訊
315                     next_month_date = new Date(fullDate[0], fullDate[1] + i2, '1');
316                     nextfullDate = [
317                         next_month_date.getFullYear(),
318                         next_month_date.getMonth() + 1,
319                     ]
320                     var next_month = {};
321                     next_month.fullYear = nextfullDate[0]; //
322                     next_month.fullMonth = nextfullDate[1];  //
323                     next_month.dayLength = _this.getMonthDays(next_month.fullMonth, next_month.fullYear);//當前月份總共有多少天
324                     next_month.firstDayWeek = next_month_date.getDay();  //當前月份第一天星期幾0~6
325                     next_month.days = [];
326                      //初始化天數
327                     for (let i = 1; i <= next_month.dayLength; i++) {
328                         item = {
329                             ymd: next_month.fullYear + '-' + next_month.fullMonth + '-' + i,
330                             ymd_cn: _this.parseMonth(next_month.fullMonth) + '' + _this.parseDay(i) + '',
331                             day: i,
332                             active: '',
333                             disabled: '',
334                         };
335                         //開始時間
336                         item.start_date = _this.compareDate(_this.select_start_ymd, item.ymd) == 2 ? 'active-start' : '';
337                         //中間的日期
338                         item.active_date = (_this.compareDate(_this.select_start_ymd, item.ymd) == 3 && _this.compareDate(_this.select_end_ymd, item.ymd) == 1) ? 'active' : '';
339                         //結束時間
340                         item.end_date = _this.compareDate(_this.select_end_ymd, item.ymd) == 2 ? 'active-end' : '';
341                         //超過設定最長日期,禁止選擇
342                         item.disabled2 = _this.compareDate(max_reserve_date, item.ymd) == 3 ? 'disabled' : '';
343                         next_month['days'].push(item);
344                     }
345                     //前補0
346                     if (next_month.firstDayWeek > 0) {
347                         for (let i = 0; i < next_month.firstDayWeek; i++) {
348                         next_month['days'].unshift('');
349                         }
350                     }
351                     _this.calendar.push(next_month)
352                 }
353                 console.log(_this.calendar);
354             },
355                         //格式月份期
356             parseMonth: function(month){
357                 month = parseInt(month);
358                 if(month <10){
359                     month = '0'+month
360                 }
361                 return month;
362             },
363 
364             //格式天
365             parseDay: function (day) {
366                 day = parseInt(day);
367                 if (day < 10) {
368                 day = '0' + day
369                 }
370                 return day;
371             },
372             // 獲取每個月的天數
373             getMonthDays(m, year) {
374                 let days = [0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
375                 if (m != 2) {
376                     return days[m];
377                 }
378                 if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0 && year % 100 === 0)) {
379                     return 29
380                 } else {
381                     return 28
382                 }
383             },
384             compareDate(date1, date2){
385                 var dateone = date1.replace(/-/g,'/');
386                 var datetwo = date2.replace(/-/g,'/');
387                 var oDate1 = new Date(dateone)
388                 var oDate2 = new Date(datetwo)
389                 if(oDate1.getTime() > oDate2.getTime()){
390                     return 1; //大于
391                 } else if (oDate1.getTime() == oDate2.getTime()) {
392                     return 2; //等于
393                 }else{
394                     return 3; //小于
395                 }
396             },
397             //點擊日期按鈕
398             selectDate:function(item){
399                 var _this = this;
400                 let select_data = item;
401                 console.log(select_data)
402                 let select_start_ymd = _this.select_start_ymd;
403                 let select_end_ymd = _this.select_end_ymd;
404                 //如果是點擊不能用的地址
405                 if (select_data.disabled != ''){
406                     return false;
407                 }
408                 if (_this.select_index == 'start') {
409                     select_start_ymd = select_data.ymd;
410                     //如果選擇的日期,是當前日期,或者比當前開始日期還早的,就 要把當前日期變為開始日期
411                    
412                     _this.select_start_ymd = select_start_ymd;
413                     _this.select_start_ymd_show = select_data.ymd_cn;
414                     _this.select_end_ymd = '';
415                     _this.select_end_ymd_show = '';
416 
417                     //將索引改為結束時間
418 
419                     _this.select_index = 'end';
420 
421                 } else if (_this.select_index == 'end'){
422                     let v = _this.compareDate(select_start_ymd, select_data.ymd)
423                     //如果選擇的時間大于開始時間,則有效,否則重置開始時間
424                     if(v == 3 ){
425                         _this.select_end_ymd = select_data.ymd;
426                         _this.select_end_ymd_show = select_data.ymd_cn;
427                         //將索引改為結束時間
428                         _this.select_index = 'start';
429                         //保存資料到快取
430                         _this.saveDate();
431                     }else{
432                         _this.select_start_ymd = select_data.ymd;
433                         _this.select_start_ymd_show = select_data.ymd_cn;
434                         _this.select_end_ymd = '';
435                         _this.select_end_ymd_show = '';
436                         //將索引改為結束時間
437                         _this.select_index = 'end';
438                     }
439 
440                 }
441                 _this.resetCalendar();
442             },
443             //重新計算一下日歷
444             resetCalendar:function(){
445                 let _this = this;
446                 let calendar = _this.calendar;
447                 if(calendar.length > 0 ){
448                     for (var i in calendar){
449                         if(calendar[i]['days'].length > 0 ){
450                             for (var i2 in calendar[i]['days']) {
451                                 if (calendar[i]['days'][i2] != ''){
452                                     //開始時間
453                                     calendar[i]['days'][i2]['start_date'] = _this.compareDate(_this.select_start_ymd, calendar[i]['days'][i2]['ymd']) == 2 ? 'active-start' : '';
454                                     //中間的日期
455                                     calendar[i]['days'][i2]['active_date'] = (_this.compareDate(_this.select_start_ymd, calendar[i]['days'][i2]['ymd']) == 3 && _this.compareDate(_this.select_end_ymd, calendar[i]['days'][i2]['ymd']) == 1) ? 'active' : '';
456                                     //結束時間
457                                     calendar[i]['days'][i2]['end_date'] = _this.compareDate(_this.select_end_ymd, calendar[i]['days'][i2]['ymd']) == 2 ? 'active-end' : '';
458                                 }
459                             }    
460                         }
461                     }
462                 }
463 
464                 _this.calendar = calendar;
465             },
466             //如果設定結束時間成功,保存一次當前時間,并且計算總天數,到快取中
467             saveDate:function(){
468                 var _this = this;
469                 var date1 = new Date(this.select_start_ymd.replace(/-/g,'/'));
470                 var date2 = new Date(this.select_end_ymd.replace(/-/g,'/'));
471                 //計算天數
472                 var days = parseInt((date2.getTime() - date1.getTime()) / 1000 / 86400);
473                 //保存快取
474                 _this.select_all_day = days;
475             }
476          },computed:{
477 
478          },mounted(){
479             var _this = this;
480             _this.$nextTick(function () {
481                 _this.initDate()
482             })
483          }
484     })
485  </script>
486 </html>

 

 

 里面的備注很清晰,需要存起來下個頁面用可以在saveDate這個函式中存進去localStorage中,

案例除了vue不基于任何插件,可以自定義修改,自定義程度高

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/18253.html

標籤:HTML5

上一篇:vue 中的路由為什么 采用 hash 路由模式,而不是href超鏈接模式(Hypertext,Reference)?

下一篇:微信小程式中的左右聯動

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more