国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

原生js實現日歷的思路與代碼

來源:懂視網 責編:小采 時間:2020-11-27 19:32:01
文檔

原生js實現日歷的思路與代碼

原生js實現日歷的思路與代碼:本篇文章給大家帶來的內容是關于原生js實現日歷的思路與代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。demo效果:實現日歷的思路:1、利用new Date()獲取今天日期2、判斷今年是平年還是閏年,確定今年每個月有多少天3、確定今天日期
推薦度:
導讀原生js實現日歷的思路與代碼:本篇文章給大家帶來的內容是關于原生js實現日歷的思路與代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。demo效果:實現日歷的思路:1、利用new Date()獲取今天日期2、判斷今年是平年還是閏年,確定今年每個月有多少天3、確定今天日期

本篇文章給大家帶來的內容是關于原生js實現日歷的思路與代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

demo效果:

這里寫圖片描述

實現日歷的思路:

1、利用new Date()獲取今天日期

2、判斷今年是平年還是閏年,確定今年每個月有多少天

3、確定今天日期所在月的第一天是星期幾

4、計算出日歷的行數

5、利用今天日期所在月的天數與該月第一天星期幾來渲染日歷表格

6、左右切換月份

源碼:

html

<div class="calendar-container">
 <div class="calendar-header">
 <div class="left btn"><</div>
 <div class="year"></div>
 <div class="right btn">></div>
 </div>
 <div class="calendar-body">
 <div class="week-row">
 <div class="week box">日</div>
 <div class="week box">一</div>
 <div class="week box">二</div>
 <div class="week box">三</div>
 <div class="week box">四</div>
 <div class="week box">五</div>
 <div class="week box">六</div>
 </div>
 <div class="day-rows">
 <!--日期的渲染的地方-->
 </div> 
 </div>
</div>

css

.calendar-container{
 width: calc(31px*7 + 1px);
 }
.calendar-header{
 display: flex; 
 justify-content: space-between;
 }
.year{
 text-align: center; 
 line-height: 30px;
 }
.btn{
 width: 30px; 
 height: 30px; 
 text-align: center; 
 line-height: 30px; 
 cursor: pointer;
 }
.calendar-body{
 border-right: 1px solid #9e9e9e; 
 border-bottom: 1px solid #9e9e9e;
 }
.week-row, 
.day-rows, 
.day-row{
 overflow: hidden;
 }
.box{
 float: left; 
 width: 30px; 
 height: 30px; 
 border-top: 1px solid #9e9e9e; 
 border-left: 1px solid #9e9e9e; 
 text-align: center; 
 line-height: 30px;
 }
.week{
 background: #00bcd4;
 }
.day{
 background: #ffeb3b;
 }
.curday{ 
 background: #ff5722;
 }

js

// 獲取今天日期
let curTime = new Date(),
 curYear = curTime.getFullYear(),
 curMonth = curTime.getMonth(),
 curDate = curTime.getDate();
 console.log(curTime, curYear, curMonth, curDate)
 // 判斷平年還是閏年
 function isLeapYear(year){ 
 return (year%400 === 0) || ((year%4 === 0) && (year%100 !== 0))
}
function render(curYear, curMonth){ 
document.querySelector('.year').innerHTML = `${curYear}年${curMonth + 1}月`; 
// 判斷今年是平年還是閏年,并確定今年的每個月有多少天 
let daysInMonth = [31, isLeapYear(curYear) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
// 確定今天日期所在月的第一天是星期幾 
let firstDayInMonth = new Date(curYear, curMonth, 1),
 firstDayWeek = firstDayInMonth.getDay(); 
 // 根據當前月的天數和當前月第一天星期幾來確定當前月的行數 
 let calendarRows = Math.ceil((firstDayWeek + daysInMonth[curMonth])/7); 
 // 將每一行的日期放入到rows數組中 
 let rows = []; 
 // 外循環渲染日歷的每一行 
 for(let i = 0; i < calendarRows; i++){
 rows[i] = `<p class="day-row">`; 
 // 內循環渲染日歷的每一天 
 for(let j = 0; j < 7; j++){ 
 // 內外循環構成了一個calendarRows*7的表格,為當前月的每個表格設置idx索引; 
 // 利用idx索引與當前月第一天星期幾來確定當前月的日期 
 let idx = i*7 + j,
 date = idx - firstDayWeek + 1; 
 // 過濾掉無效日期、渲染有效日期 
 if(date <= 0 || date > daysInMonth[curMonth]){
 rows[i] += `<p class="day box"></p>`
 }else if(date === curDate){
 rows[i] += `<p class="day box curday">${date}</p>`
 }else{
 rows[i] += `<p class="day box">${date}</p>`
 }
 }
 rows[i] += `</p>`
 } let dateStr = rows.join(''); 
 document.querySelector('.day-rows').innerHTML = dateStr;
}
// 首次調用render函數
render(curYear, curMonth);
let leftBtn = document.querySelector('.left'),
 rightBtn = document.querySelector('.right');
 // 向左切換月份
leftBtn.addEventListener('click', function(){
 curMonth--; 
 if(curMonth < 0){
 curYear -= 1;
 curMonth = 11;
 }
 render(curYear, curMonth);
})
// 向右切換月份
rightBtn.addEventListener('click', function(){
 curMonth++; 
 if(curMonth > 11){
 curYear += 1;
 curMonth = 0;
 }
 render(curYear, curMonth);
})

小結:

1、為了實現左右切換月份,將日歷日期渲染代碼放入到了render函數,方便月份切換后重新渲染;

2、確定當前月的行數時,要結合當前月的天數與當前月第一天星期幾來共同確定;

3、原生js日歷中比較核心的就是如何確定每一天的日期,在這兒利用了內外循環,內外循環構成了一個calendarRows*7的表格,為當前月的每個表格設置idx索引;利用idx索引與當前月第一天星期幾來確定當前月的日期;記得要過濾掉無效日期!!!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

原生js實現日歷的思路與代碼

原生js實現日歷的思路與代碼:本篇文章給大家帶來的內容是關于原生js實現日歷的思路與代碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。demo效果:實現日歷的思路:1、利用new Date()獲取今天日期2、判斷今年是平年還是閏年,確定今年每個月有多少天3、確定今天日期
推薦度:
標簽: 方法 日歷 js
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产美女白丝袜精品_a不卡 | 久久久久久夜精品精品免费啦 | 国产视频观看 | 国产美女啪啪 | 国产一区二区三区视频在线观看 | 欧美激情一区 | 欧美国产在线视频 | 中文在线第一页 | 亚洲入口 | 日韩亚洲欧美在线 | 中文字幕第一页亚洲 | 欧美日韩在线亚洲国产人 | 国产大片91精品免费观看不卡 | 初撮五十路交尾视频 | 国产成人久久久精品一区二区三区 | 亚欧成人毛片一区二区三区四区 | 欧美三级在线 | 青草青草伊人精品视频 | a免费国产一级特黄aa大 | 国产九九热 | 欧美一区二区三区在线 | 国产成人精品免费午夜app | 久久香蕉热 | 欧美v在线| 欧美xxxxxbbbb| 欧美爱爱动态图 | 国产伦精品一区二区三区网站 | 国产成人精品综合久久久 | 一区二区在线播放视频 | 国产精品久久久久毛片 | 欧美亚洲综合在线观看 | 亚洲 中文 欧美 日韩 在线人 | 欧美第一页| 国产va在线视频观看 | 国产一区在线免费观看 | 日韩欧美一区二区在线 | 久久久久777777人人人视频 | 经典三级第一页 | 国产网站免费在线观看 | 最新国产精品视频免费看 | 成人欧美日韩 |