最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實現(xiàn)一個簡單的日歷

 更新時間:2017年02月22日 14:16:52   作者:Reber  
本文主要介紹了用js實現(xiàn)一個日歷的示例代碼并解析其實現(xiàn)原理,具有很好的參考價值,下面跟著小編一起來看下吧

主要分為三個部分,1:獲取li元素 2:如何填寫對應(yīng)的日期 3:如何獲取點擊li元素的事件。

1:通過節(jié)點間關(guān)系的屬性children 獲取li元素(兩個for循壞遍歷);

2:在遍歷填寫日期時,在第一行判斷在當(dāng)月的第一天在星期幾,然后從第一天開始填寫,直到大于當(dāng)月的天數(shù)就暫停填寫,并開始填寫下個月的日期。第一行上個月的日期顯示  : 上月天數(shù)顯示開始值 = 計算上個月的天數(shù) - 這個月開始的第一天在星期幾的值 -1,然后在第一行上月天數(shù)顯示開始值自加。

3:利用JS的事件冒泡獲取li的innerHTML顯示出對應(yīng)日期

效果圖:

代碼如下:

<!doctype html>
<html lang="en">
 <head>
 <meta charset="UTF-8">
 <meta name="Generator" content="EditPlus®">
 <meta name="Author" content="">
 <meta name="Keywords" content="">
 <meta name="Description" content="">
 <title>calendar</title>
 <style>
 .clear:after{
 content:"";
 display:table;
 clear:both;
 }
 .left{
 float:left;
 }
 ul{
 padding:0px;
 margin-top:5px;
 margin-bottom:0px;
 }
 ul>li{
 float:left;
 list-style:none;
 width:30px;
 height: 21px;
 border: 1px solid #ccc;
 text-align:center;
 }
 .gray{
 color:#766565;
 }
 .top {
 height:25px;
 }
 .top .lf-tri{
 border:10px solid transparent;
 border-right-color:black;
 margin-top:4px;
 }
 .top .rf-tri{
 border:10px solid transparent;
 border-left-color:black;
 margin-top:4px;
 }
 .top .content{
 width:185px;
 height:5px;
 text-align:center;
 }
 </style>
 </head>
 <body> 
 <div class="top clear">
 <div class="left lf-tri" onclick="lastMonth()"></div>
 <div class="left content">2017年2月1日</div>
 <div class="left rf-tri" onclick=" nextMonth()"></div>
 </div>
 <div>
 <div id="week">
 <ul class="clear">
 <li>日</li>
 <li>一</li>
 <li>二</li>
 <li>三</li>
 <li>四</li>
 <li>五</li>
 <li>六</li>
 <ul>
 </div>
 <div id="date" onclick='getDateNum(event)'>
 <ul class="clear">
 <li>30</li>
 <li>31</li>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 </ul>
 <ul class="clear">
 <li>6</li>
 <li>7</li>
 <li>8</li>
 <li>9</li>
 <li>10</li>
 <li>11</li>
 <li>12</li>
 </ul>
 <ul class="clear">
 <li>13</li>
 <li>14</li>
 <li>15</li>
 <li>16</li>
 <li>17</li>
 <li>18</li>
 <li>19</li>
 </ul>
 <ul class="clear">
 <li>20</li>
 <li>21</li>
 <li>22</li>
 <li>23</li>
 <li>24</li>
 <li>25</li>
 <li>26</li>
 </ul>
 <ul class="clear">
 <li>27</li>
 <li>28</li>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 </ul>
 <ul class="clear">
 <li>27</li>
 <li>28</li>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 </ul>
 </div>
 <div>
 <script>
 function $(id){
 return document.getElementById(id);
 }
 function change(cls){
 return document.getElementsByClassName(cls);
 }
 function getDateNum(e) {
 console.log(e && e.target.nodeName)//打印發(fā)生事件的元素,再獲取元素nodeName
 if(e.target.nodeName=="LI"){//先判斷nodeName是LI
 if(e.target.className!="gray"){//點擊本月的日期,顯示在日期欄
 change("content")[0].innerHTML = year+'年'+(month+1)+'月'+e.target.innerHTML+'日';
 }else{//點擊灰色日期即(上個月或者下個月日期)切換到當(dāng)月
 if(e.target.innerHTML>14){
 lastMonth();
 }else {
 nextMonth();
 }
 }
 }
 }
 //獲取年、月
 var today = new Date();
 var year=today.getFullYear(), month = today.getMonth();
 var totalDay;
 var uls=$("date").children,list;
 function loadCalendar(){
 totalDay=getMonthDays(year,month+1);//計算一個月的天數(shù)
 var firstDay = (new Date(year,month,1)).getDay();//計算每個月1號在星期幾
 var lastMonthDay=getMonthDays(year,month);
 var lastDayCal=lastMonthDay-firstDay+1;//計算上個月在第一行顯示的天數(shù)
 //獲取ul元素
 var num=1 ,nextNum=1;//日期顯示
 // 類數(shù)組對象 轉(zhuǎn) 數(shù)組
 //uls = Array.prototype.slice.call(uls)
 //獲取li元素 填充
 for(var r=0;r<uls.length;r++){
 list=uls[r].children;//遍歷ul,獲得li
 for(var line=0;line<list.length;line++){
 if(r==0){//在第一行 與第一天進行判斷 大于等于第一天時載入日期
 if(line>=firstDay){
 list[line].innerHTML=num++;
 list[line].setAttribute("class","");
 }else {
 list[line].innerHTML=lastDayCal++;//第一行的上個月天數(shù)顯示
 list[line].setAttribute("class","gray");
 }
 }else {
 //判斷是否超出天數(shù) ,不超出則繼續(xù)加,超出則顯示下個月日期
 if(num<=totalDay){
 list[line].setAttribute("class","");
 list[line].innerHTML=num++;
 }else {
 list[line].innerHTML=nextNum++;//下個月日期顯示
 list[line].setAttribute("class","gray");
 }
 }
 }
 }
 }
 loadCalendar();
 function getMonthDays(year,month){
 //判斷2月份天數(shù)
 if(month==2){
 days= (year%4==0)&&(year%100!=0)||(year%400==0)? 29:28;
 }else {
 //1-7月 單數(shù)月為31日 
 if(month<7){
 days= month%2==1?31:30;
 }else {
 //8-12月 雙月為31日
 days = month%2==0?31:30;
 }
 }
 return days; 
 }
 //右擊箭頭下個月
 //change("rf-tri")[0].onclick =
 function nextMonth() {
 month++;
 if(month>11){
 year+=1;
 month=0;
 }
 change("content")[0].innerHTML=year+"年"+(month+1)+"月"+"1日";
 //console.log(month+1);
 loadCalendar();
 }
 //左擊箭頭上個月
 //change("lf-tri")[0].onclick =
 function lastMonth() {
 month--;
 if(month<0){
 month=11;
 year-=1;
 }
 change("content")[0].innerHTML=year+"年"+(month+1)+"月"+"1日";
 //console.log(month+1);
 loadCalendar();
 }
 </script>
 </body>
</html>

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • JavaScript中setInterval()和setTimeout()的用法及區(qū)別

    JavaScript中setInterval()和setTimeout()的用法及區(qū)別

    這篇文章主要給大家介紹了關(guān)于JavaScript中setInterval()和setTimeout()用法及區(qū)別的相關(guān)資料,Javascript的setTimeOut和setInterval函數(shù)應(yīng)用非常廣泛,它們都用來處理延時和定時任務(wù),需要的朋友可以參考下
    2023-11-11
  • firefox中用javascript實現(xiàn)鼠標位置的定位

    firefox中用javascript實現(xiàn)鼠標位置的定位

    firefox中用javascript實現(xiàn)鼠標位置的定位...
    2007-06-06
  • scrollWidth,clientWidth,offsetWidth的區(qū)別

    scrollWidth,clientWidth,offsetWidth的區(qū)別

    這篇文章主要介紹了scrollWidth,clientWidth,offsetWidth的區(qū)別,需要的朋友可以參考下
    2015-01-01
  • JS原生帶縮略圖的圖片切換效果

    JS原生帶縮略圖的圖片切換效果

    這篇文章主要介紹了JS原生帶縮略圖的圖片切換效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-10-10
  • 微信小程序公用參數(shù)與公用方法用法示例

    微信小程序公用參數(shù)與公用方法用法示例

    這篇文章主要介紹了微信小程序公用參數(shù)與公用方法用法,結(jié)合實例形式分析了微信小程序中公用參數(shù)與公用方法的簡單定義與使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • axios使用攔截器統(tǒng)一處理所有的http請求的方法

    axios使用攔截器統(tǒng)一處理所有的http請求的方法

    這篇文章主要介紹了axios使用攔截器統(tǒng)一處理所有的http請求的方法,通過一段實例代碼給大家介紹了axios攔截器使用,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • JavaScript實現(xiàn)音樂自動切換和輪播

    JavaScript實現(xiàn)音樂自動切換和輪播

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)音樂自動切換和輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JavaScript中SetInterval與setTimeout的用法詳解

    JavaScript中SetInterval與setTimeout的用法詳解

    在寫H5游戲時經(jīng)常需要使用定時刷新頁面實現(xiàn)動畫效果,比較常用即setTimeout()以及setInterval(),但是大家對SetInterval與setTimeout的用法了解嗎,下面通過本文給大家詳解js中SetInterval與setTimeout的用法,需要的朋友參考下
    2015-11-11
  • TypeScript聲明文件的語法與場景詳解

    TypeScript聲明文件的語法與場景詳解

    使用ts進行開發(fā)的時候,不可避免的需要引用第三方的 JS 的庫,但是默認情況下TS是不認識我們引入的這些JS庫的,所以在使用這些JS庫的時候,我們就要通過聲明文件告訴TS它是什么,這篇文章主要給大家介紹了關(guān)于TypeScript聲明文件的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 小程序上傳文件至云存儲的實現(xiàn)

    小程序上傳文件至云存儲的實現(xiàn)

    在小程序云開發(fā)中,要實現(xiàn)上傳文件至云存儲,有兩種方案:云函數(shù)和HTTP?API,本文主要講講如何使用HTTP?API實現(xiàn)小程序外上傳文件至云存儲,感興趣的可以了解一下
    2022-01-01

最新評論

武穴市| 德州市| 游戏| 紫云| 泗阳县| 永昌县| 隆化县| 海安县| 邵武市| 双桥区| 九龙县| 秭归县| 福安市| 久治县| 昭通市| 余庆县| 分宜县| 峡江县| 元江| 喜德县| 沅江市| 大余县| 兴隆县| 疏勒县| 平南县| 永康市| 库伦旗| 嵩明县| 高青县| 阿图什市| 石泉县| 鱼台县| 维西| 会理县| 潜山县| 蓬溪县| 兴城市| 河南省| 白河县| 定襄县| 晋江市|