欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生js實(shí)現(xiàn)仿window10系統(tǒng)日歷效果的實(shí)例

 更新時(shí)間:2017年10月31日 10:24:23   作者:待繁華落盡  
下面小編就為大家?guī)硪黄鷍s實(shí)現(xiàn)仿window10系統(tǒng)日歷效果的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

舞動(dòng)的靈魂版js日歷,完全采用js實(shí)現(xiàn),故而實(shí)現(xiàn)了與語言無關(guān),jsp、asp.net php asp均可使用.無論你是開發(fā)軟件,還是網(wǎng)站,均是不可或缺的實(shí)用代碼。

該日歷主要實(shí)現(xiàn)了獲取當(dāng)前時(shí)間時(shí)分秒,年月日星期,動(dòng)態(tài)生成選擇年的select,月的select,然后根據(jù)你所選中的年月,顯示該年月對(duì)應(yīng)的這一個(gè)月的日期。

點(diǎn)擊上一個(gè)月,下一個(gè)月按鈕,在下拉列表中顯示對(duì)應(yīng)的年月。

 <!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
  #calendar {
   position: absolute;
   padding: 5px;
   border: 1px solid #000000;
   background: #8f3349;
   display: none;
  }

  #todayTime {
   padding: 5px 0;
   font-size: 40px;
   color: white;
  }
  #todayDate {
   padding: 5px 0;
   font-size: 24px;
   color: #ffcf88;
  }
  #tools {
   padding: 5px 0;
   height: 30px;
   color: white;
  }
  #tools .l {
   float: left;
  }
  #tools .r {
   float: right;
  }
  table {
   width: 100%;
   color: white;
  }
  table th {
   color: #a2cbf3;
  }
  table td {
   text-align: center;
   cursor: default;
  }
  table td.today {
   background: #cc2951;
   color: white;
  }
 </style>
 <script>
  window.onload = function() {

   var text1 = document.getElementById('text1');

   text1.onfocus = function() {
    calendar();
   }

//   calendar();

   function calendar() {

    var calendarElement = document.getElementById('calendar');
    var todayTimeElement = document.getElementById('todayTime');
    var todayDateElement = document.getElementById('todayDate');
    var selectYearElement = document.getElementById('selectYear');
    var selectMonthElement = document.getElementById('selectMonth');
    var showTableElement = document.getElementById('showTable');
    var prevMonthElement = document.getElementById('prevMonth');
    var nextMonthElement = document.getElementById('nextMonth');

    calendarElement.style.display = 'block';

    /*
     * 獲取今天的時(shí)間
     * */
    var today = new Date();

    //設(shè)置日歷顯示的年月
    var showYear = today.getFullYear();
    var showMonth = today.getMonth();

     //持續(xù)更新當(dāng)前時(shí)間
    updateTime();

    //顯示當(dāng)前的年月日星期
    todayDateElement.innerHTML = getDate(today);

    //動(dòng)態(tài)生成選擇年的select
    for (var i=1970; i<2020; i++) {
     var option = document.createElement('option');
     option.value = i;
     option.innerHTML = i;
     if ( i == showYear ) {
      option.selected = true;
     }
     selectYearElement.appendChild(option);
    }
    //動(dòng)態(tài)生成選擇月的select
    for (var i=1; i<13; i++) {
     var option = document.createElement('option');
     option.value = i - 1;
     option.innerHTML = i;
     if ( i == showMonth + 1 ) {
      option.selected = true;
     }
     selectMonthElement.appendChild(option);
    }

    //初始化顯示table
    showTable();

    //選擇年
    selectYearElement.onchange = function() {
     showYear = this.value;
     showTable();
     showOption();
    }

    //選擇月
    selectMonthElement.onchange = function() {
     showMonth = Number(this.value);
     showTable();
     showOption();
    }

    //上一個(gè)月
    prevMonthElement.onclick = function() {
     showMonth--;
     showTable();
     showOption();
    }

    //下一個(gè)月
    nextMonthElement.onclick = function() {
     showMonth++;
     showTable();
     showOption();
    }


    /*
    * 實(shí)時(shí)更新當(dāng)前時(shí)間
    * */
    function updateTime() {
     var timer = null;
     //每個(gè)500毫秒獲取當(dāng)前的時(shí)間,并把當(dāng)前的時(shí)間格式化顯示到指定位置
     var today = new Date();
     todayTimeElement.innerHTML = getTime(today);
     timer = setInterval(function() {
      var today = new Date();
      todayTimeElement.innerHTML = getTime(today);
     }, 500);
    }

    function showTable() {
     showTableElement.tBodies[0].innerHTML = '';
     //根據(jù)當(dāng)前需要顯示的年和月來創(chuàng)建日歷
     //創(chuàng)建一個(gè)要顯示的年月的下一個(gè)的日期對(duì)象
     var date1 = new Date(showYear, showMonth+1, 1, 0, 0, 0);
     //對(duì)下一個(gè)月的1號(hào)0時(shí)0分0秒的時(shí)間 - 1得到要顯示的年月的最后一天的時(shí)間
     var date2 = new Date(date1.getTime() - 1);
     //得到要顯示的年月的總天數(shù)
     var showMonthDays = date2.getDate();
     //獲取要顯示的年月的1日的星期,從0開始的星期
     date2.setDate(1);
     //showMonthWeek表示這個(gè)月的1日的星期,也可以作為表格中前面空白的單元格的個(gè)數(shù)
     var showMonthWeek = date2.getDay();

     var cells = 7;
     var rows = Math.ceil( (showMonthDays + showMonthWeek) / cells );

     //通過上面計(jì)算出來的行和列生成表格
     //沒生成一行就生成7列
     //行的循環(huán)
     for ( var i=0; i<rows; i++ ) {

      var tr = document.createElement('tr');

      //列的循環(huán)
      for ( var j=0; j<cells; j++ ) {

       var td = document.createElement('td');

       var v = i*cells + j - ( showMonthWeek - 1 );

       //根據(jù)這個(gè)月的日期控制顯示的數(shù)字
       //td.innerHTML = v;
       if ( v > 0 && v <= showMonthDays ) {

        //高亮顯示今天的日期
        if ( today.getFullYear() == showYear && today.getMonth() == showMonth && today.getDate() == v ) {
         td.className = 'today';
        }

        td.innerHTML = v;
       } else {
        td.innerHTML = '';
       }

       td.ondblclick = function() {
        calendarElement.style.display = 'none';

        text1.value = showYear + '年' + (showMonth+1) + '月' + this.innerHTML + '日';
       }

       tr.appendChild(td);

      }

      showTableElement.tBodies[0].appendChild(tr);

     }
    }

    function showOption() {

     var date = new Date(showYear, showMonth);
     var sy = date.getFullYear();
     var sm = date.getMonth();
     console.log(showYear, showMonth)

     var options = selectYearElement.getElementsByTagName('option');
     for (var i=0; i<options.length; i++) {
      if ( options[i].value == sy ) {
       options[i].selected = true;
      }
     }

     var options = selectMonthElement.getElementsByTagName('option');
     for (var i=0; i<options.length; i++) {
      if ( options[i].value == sm ) {
       options[i].selected = true;
      }
     }
    }
   }

   /*
    * 獲取指定時(shí)間的時(shí)分秒
    * */
   function getTime(d) {
    return [
     addZero(d.getHours()),
     addZero(d.getMinutes()),
     addZero(d.getSeconds())
    ].join(':');
   }

   /*
   * 獲取指定時(shí)間的年月日和星期
   * */
   function getDate(d) {
    return d.getFullYear() + '年'+ addZero(d.getMonth() + 1) +'月'+ addZero(d.getDate()) +'日 星期' + getWeek(d.getDay());
   }

   /*
   * 給數(shù)字加前導(dǎo)0
   * */
   function addZero(v) {
    if ( v < 10 ) {
     return '0' + v;
    } else {
     return '' + v;
    }
   }

   /*
   * 把數(shù)字星期轉(zhuǎn)換成漢字星期
   * */
   function getWeek(n) {
    return '日一二三四五六'.split('')[n];
   }

  }
 </script>
</head>
<body>

<input type="text" id="text1">

 <div id="calendar">

  <div id="todayTime"></div>
  <div id="todayDate"></div>

  <div id="tools">
   <div class="l">
    <select id="selectYear"></select> 年
    <select id="selectMonth"></select> 月
   </div>
   <div class="r">
    <span id="prevMonth">∧</span>
    <span id="nextMonth">∨</span>
   </div>
  </div>

  <table id="showTable">
   <thead>
    <tr>
     <th>日</th>
     <th>一</th>
     <th>二</th>
     <th>三</th>
     <th>四</th>
     <th>五</th>
     <th>六</th>
    </tr>
   </thead>
   <tbody></tbody>
  </table>

 </div>

</body>
</html>

效果:

以上這篇原生js實(shí)現(xiàn)仿window10系統(tǒng)日歷效果的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • AJAX使用了UpdatePanel后無法使用alert彈出腳本

    AJAX使用了UpdatePanel后無法使用alert彈出腳本

    今天在做項(xiàng)目的時(shí)候發(fā)現(xiàn)個(gè)問題。。使用UpdatePanel后alert腳本就要報(bào)錯(cuò)了。
    2010-04-04
  • JavaScript實(shí)現(xiàn)手寫原生任務(wù)定時(shí)器

    JavaScript實(shí)現(xiàn)手寫原生任務(wù)定時(shí)器

    定時(shí)器顧名思義就是在某個(gè)特定的時(shí)間去執(zhí)行一些任務(wù),現(xiàn)代的應(yīng)用程序早已不是以前的那些由簡單的增刪改查拼湊而成的程序了,高復(fù)雜性早已是標(biāo)配,而任務(wù)的定時(shí)調(diào)度與執(zhí)行也是對(duì)程序的基本要求了。本文將利用JavaScript手寫原生任務(wù)定時(shí)器,需要的可以參考一下
    2022-03-03
  • uniapp小程序配置tabbar底部導(dǎo)航欄實(shí)戰(zhàn)指南

    uniapp小程序配置tabbar底部導(dǎo)航欄實(shí)戰(zhàn)指南

    tabBar如果應(yīng)用是一個(gè)多tab應(yīng)用,可以通過tabBar配置項(xiàng)指定tab欄的表現(xiàn),以及tab切換時(shí)顯示的對(duì)應(yīng)頁,下面這篇文章主要給大家介紹了關(guān)于uniapp小程序配置tabbar底部導(dǎo)航欄的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • js使用Promise實(shí)現(xiàn)簡單的Ajax緩存

    js使用Promise實(shí)現(xiàn)簡單的Ajax緩存

    這篇文章主要介紹了js使用Promise實(shí)現(xiàn)簡單的Ajax緩存,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼

    js實(shí)現(xiàn)倒計(jì)時(shí)關(guān)鍵代碼

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)倒計(jì)時(shí)的關(guān)鍵代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • javascript實(shí)現(xiàn)的上下無縫滾動(dòng)效果

    javascript實(shí)現(xiàn)的上下無縫滾動(dòng)效果

    這篇文章主要介紹了javascript實(shí)現(xiàn)的上下無縫滾動(dòng)效果,具有無縫滾動(dòng)及響應(yīng)鼠標(biāo)滑過停止?jié)L動(dòng)的功能,簡便實(shí)用,需要的朋友可以參考下
    2016-09-09
  • 微信小程序中實(shí)現(xiàn)車牌輸入功能

    微信小程序中實(shí)現(xiàn)車牌輸入功能

    我們都知道車牌是有一定規(guī)律的,本文實(shí)現(xiàn)了微信小程序中實(shí)現(xiàn)車牌輸入功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • js tab效果代碼增強(qiáng)版

    js tab效果代碼增強(qiáng)版

    兼容IE,firefox的js tab效果代碼增強(qiáng)版
    2008-04-04
  • JavaScript 字符串處理函數(shù)使用小結(jié)

    JavaScript 字符串處理函數(shù)使用小結(jié)

    JavaScript 字符串處理函數(shù)使用小結(jié),學(xué)習(xí)js的朋友可以參考下。
    2010-12-12
  • 原生js實(shí)現(xiàn)淘寶放大鏡效果

    原生js實(shí)現(xiàn)淘寶放大鏡效果

    這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)放大鏡效果,制作一個(gè)類似于淘寶的放大鏡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評(píng)論