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

純js模仿windows系統(tǒng)日歷

 更新時間:2017年02月04日 08:32:32   作者:979987824  
本文主要介紹了純js模仿windows系統(tǒng)日歷的思路與實(shí)現(xiàn)方法。具有很好的參考價值,下面跟著小編一起來看下吧

在網(wǎng)上看了幾篇關(guān)于生成日歷的js 教程于是自己也整理了一個想法思路 大家有什么建議歡迎提出

首先這個項(xiàng)目里面本人認(rèn)為的幾個難點(diǎn):

1、如何定義每一個月的第一天位置

每個月的第一天都不是固定的星期幾,所以第一天的輸出需要動動腦筋把它放到對應(yīng)的星期里面

2、每個月的最后一天有時候因?yàn)樾袛?shù)不夠輸出不了怎么辦?

下面會有答案 ^_^

思路:

1、定義好每一個月份的日期天數(shù)

2、獲取當(dāng)前的系統(tǒng)日期初始化數(shù)據(jù)

3、輸出日歷

    2.1、先獲取當(dāng)前月的第一天是星期幾(這一點(diǎn)與日歷的排版至關(guān)重要!)
    2.2、獲取當(dāng)前月的天數(shù)
    2.3、獲取當(dāng)前月有多少個星期(即要輸出多少行 行數(shù)這里我會預(yù)留多一行)
    2.4、獲取當(dāng)前年份和月份 用作顯示

下面便是完整的代碼:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>js 日歷</title>
 <style type="text/css">
  *{
  border: 0;
  padding: 0;
  margin: 0;
  font-family: "微軟雅黑";
  }
  a{
  text-decoration: none;
  color: #000;
  }
  li{
  list-style-type: none;
  }
  .calendar_wrap{
  width: 350px;
  margin: 0 auto;
  padding: 0;
  border: 1px solid #000;
  }
  .calendar_list{
  width: 100%;
  margin-top: 10px;
  }
  .calendar_list tr{
  width: 100%;
  }
  .calendar_list tr td{
  text-align: center;
  height: 45px;
  }
  .control_bar{
  word-spacing: -6px;
  }
  .control_bar span,.control_bar b{
  display: inline-block;
  text-align: center;
  word-spacing: 0px;
  }
  .left-bt,.right-bt{
  width: 50px;
  }
  #reduce_bt,#add_bt{
  width: 50%;
  height: 25px;
  border-radius: 50%;
  }
  #reduce_bt:focus{
  outline: none;
  }
  #add_bt:focus{
  outline: none;
  }
  #current_date{
  width: 250px;
  }
  #resetBt{
  display: block;
  text-align: center;
  color: #fff;
  cursor: pointer;
  width: 120px;
  line-height: 40px;
  background-color: #FF7F27;
  margin: 0 auto;
  }
  #date_list tr td:hover{
  background-color: #ccc;
  cursor: default;
  }
 </style>
</head>
<body>
 <div class="calendar_wrap">
 <div class="control_bar">
  <span class="left-bt"><input type="button" id="reduce_bt" value="<"></span>
  <b id="current_date">2017-02</b>
  <span class="right-bt"><input type="button" id="add_bt" value=">"></span>
 </div>
 <table class="calendar_list" cellspacing="0">
  <thead>
   <tr>
   <td>日</td>
   <td>一</td>
   <td>二</td>
   <td>三</td>
   <td>四</td>
   <td>五</td>
   <td>六</td>
   </tr> 
  </thead>
  <tbody id="date_list"></tbody> 
 </table>
 </div>
 <span id="resetBt">回到現(xiàn)在日期</span>
 <script type="text/javascript">
  var dateScreen = document.getElementById('current_date');//獲取顯示當(dāng)前年份月份的div
  var reduceBt = document.getElementById('reduce_bt');//獲取減少月份的按鈕
  var addBt = document.getElementById('add_bt');//獲取增加月份的按鈕
  var dateList = document.getElementById('date_list');//獲取顯示所有日期部分
  var resetBt = document.getElementById('resetBt');//獲取重設(shè)按鈕
  //定義好每月的日期總數(shù) 總數(shù)按js 獲取月份數(shù)值的下標(biāo)方式儲存
  var overall_date = [31,28,31,30,31,30,31,31,30,31,30,31];
  var add_date = 1;//定義添加日期數(shù)的初始化
  //初始化日歷
  //獲取現(xiàn)在的日期
  var now_date = new Date();
  var nowFullYear = now_date.getFullYear();
  var nowMonth = now_date.getMonth();
  //執(zhí)行日歷輸出函數(shù)
  printCalendar();
  //-----------------------------------
  //月份減少按鈕點(diǎn)擊事件
  reduceBt.onclick = function(){
  nowMonth = nowMonth - 1;
  if (nowMonth == -1) {
  nowFullYear = nowFullYear - 1;
  nowMonth = 11;
  }
  clearRows();
  printCalendar();
  }
  //增加月份按鈕點(diǎn)擊事件
  addBt.onclick = function(){
  nowMonth+= 1;
  if (nowMonth == 12) {
  nowFullYear+= 1;
  nowMonth = 0;
  } 
  clearRows();
  printCalendar();
  }
  //重設(shè)按鈕點(diǎn)擊事件
  resetBt.onclick = function(){
  var resetDate = new Date();
  nowFullYear = resetDate.getFullYear();
  nowMonth = resetDate.getMonth();
  clearRows();
  printCalendar();
  }
  function printCalendar(){
  var printDate = new cur_date(nowFullYear,nowMonth);//實(shí)例cur_date方法
  var printFirstDay = printDate.firstDay;//獲取要輸出月份第一天的星期
  var printTotalDate = printDate.totalDate;//獲取輸出日期的總數(shù)
  var printMonth = printDate.cur_month;//獲取輸出的月份
  (printMonth >= 9)?(printMonth = (printMonth + 1)):(printMonth = ("0" + (printMonth + 1)));
  //調(diào)整月份的顯示格式
  var printYear = printDate.cur_year;//獲取輸出的年份
  var totalRows = Math.ceil((printTotalDate + (printFirstDay - 1)) / 7) + 1;
  //獲取行數(shù)
  //利用天數(shù)除以7天獲得行數(shù)并將它向上去整 但是上限是5
  //而考慮到某些月會有6行所以在總行數(shù)里面加1 以防萬一
  //開始輸出
  //首先顯示出年和月
  dateScreen.innerText = printYear + "-" + printMonth;
   //開始輸出日期
   for (var i = 0; i < totalRows; i++) {
   dateList.insertRow(i);
   for (var j = 0; j < 7; j++) {
   //當(dāng)天數(shù)總量大于額定總量時先終止內(nèi)部循環(huán)
   if (add_date > printTotalDate) {
   break;
   }
   dateList.rows[i].insertCell(j);
   //改變周日和周六的文字顏色
   if (j == 0) {
   dateList.rows[i].cells[j].style.color = "red";
   dateList.rows[i].cells[j].style.fontWeight = "bold";
   }else if(j == 6){
   dateList.rows[i].cells[j].style.color = "green";
   dateList.rows[i].cells[j].style.fontWeight = "bold";
   }
   if (i == 0 && j >= printFirstDay) {
   //當(dāng)此時是第一行時而且單元格下標(biāo)大于等于當(dāng)前月第一天的星期就開始為單元格填入文本
   dateList.rows[i].cells[j].innerText = add_date;
   add_date++;
   }else if(i > 0){
   //第一行以后的單元格就按循環(huán)添加即可
   dateList.rows[i].cells[j].innerText = add_date;
   add_date++;
   }
   }
   }
  add_date = 1;//輸出完把日期總數(shù)重新賦值為1
  }
  //獲取當(dāng)前年、月、第一天是星期幾、日期總數(shù)
  function cur_date(curYear,curMonth){
  this.cur_firstDate = new Date(curYear,curMonth,1);//獲取現(xiàn)在日期的第一天
  this.cur_year = curYear;//獲取當(dāng)前的年
  this.cur_month = curMonth;//獲取當(dāng)前的月
  this.totalDate = is_leapYear(curYear,curMonth);//獲取總天數(shù)
  this.firstDay = this.cur_firstDate.getDay()//獲取每個月的第一天是星期幾
  }
  //判斷今年是否為閏年
  function is_leapYear(target_year,target_month){
  if ((target_month == 1) && (target_year % 4 == 0) && ((target_year % 100 != 0) || (target_year % 400 != 0))) {
     //當(dāng)前月是2月且當(dāng)前年是閏年
     return 29;
  }else{
  //其他月按正常日期總數(shù)輸出
  return overall_date[target_month];
  }
  }
  function clearRows(){
  var rowsNum = dateList.rows.length;
  while(rowsNum > 0){
   dateList.deleteRow(rowsNum - 1);
   rowsNum--;
  }
  }
 </script>
</body>
</html>

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

相關(guān)文章

  • javascript正則表達(dá)式基礎(chǔ)知識入門

    javascript正則表達(dá)式基礎(chǔ)知識入門

    很長時間沒看正則表達(dá)式了,碰巧今天用到,溫故知新了一把,這里記錄下來,分享給大家,都是些基礎(chǔ)的知識,重點(diǎn)給大家講解的是正則表達(dá)式中4種常用的方法,50% 的舉一反三練習(xí)中的原創(chuàng)。
    2015-04-04
  • 一個報數(shù)游戲js版(約瑟夫環(huán)問題)

    一個報數(shù)游戲js版(約瑟夫環(huán)問題)

    隨便給一個數(shù) 比如100,那么從1到100圍成一個圓圈,然后就類似123123報數(shù)一樣逢3就舍掉,一直這樣輪詢 那么最后剩下來的那個數(shù)是多少?
    2010-08-08
  • 一文詳解JS私有屬性的6種實(shí)現(xiàn)方式

    一文詳解JS私有屬性的6種實(shí)現(xiàn)方式

    class是創(chuàng)建對象的模版,由一系列屬性和方法構(gòu)成,用于表示對同一概念的數(shù)據(jù)和操作。有的屬性和方法是對外的,但也有的是私有的。本文梳理了六種私有屬性的實(shí)現(xiàn)方式,需要的可以參考一下
    2022-03-03
  • JavaScript動態(tài)創(chuàng)建二維數(shù)組的方法示例

    JavaScript動態(tài)創(chuàng)建二維數(shù)組的方法示例

    這篇文章主要介紹了JavaScript動態(tài)創(chuàng)建二維數(shù)組的方法,結(jié)合實(shí)例形式分析了javascript動態(tài)創(chuàng)建二維數(shù)組的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • 跨瀏覽器的 mouseenter mouseleave 以及 compareDocumentPosition的使用說明

    跨瀏覽器的 mouseenter mouseleave 以及 compareDocumentPosition的使用說明

    昨天去 大牛 司徒正美 的blog 看博文 突然看到 關(guān)于 onmouseenter 和onmouseleave 兩個ie專有事件..
    2010-05-05
  • javascript基本數(shù)據(jù)類型和對象類型歸檔問題解析

    javascript基本數(shù)據(jù)類型和對象類型歸檔問題解析

    這篇文章主要介紹了javascript基本數(shù)據(jù)類型和對象類型歸檔,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • js 獲取(接收)地址欄參數(shù)值的方法

    js 獲取(接收)地址欄參數(shù)值的方法

    當(dāng)?shù)刂窓诤袇?shù),我們可以再目標(biāo)頁面通過window.location.search來獲取我們需要的參數(shù)及其值,接下來為大家介紹下詳細(xì)獲取方法,感興趣的朋友可以參考下哈
    2013-04-04
  • JavaScript網(wǎng)頁表單form中禁止自動提交的兩種方式

    JavaScript網(wǎng)頁表單form中禁止自動提交的兩種方式

    本文是我本人在開發(fā)網(wǎng)頁時,在表單中加入了button按鈕,本來是用于jQuery點(diǎn)擊相應(yīng)事件的按鈕,然后,但我點(diǎn)擊button時,發(fā)現(xiàn)不是達(dá)到j(luò)Query指定效果,所以在本文中,我們將討論網(wǎng)頁表單(form)中提交的兩種方式,需要的朋友可以參考下
    2024-06-06
  • javascript css在IE和Firefox中區(qū)別分析

    javascript css在IE和Firefox中區(qū)別分析

    我們討論的主題CSS網(wǎng)頁布局,最令大家頭疼的問題就是瀏覽器兼容性,雖然52CSS.com介紹過很多這方向的知識,但依然讓很多開發(fā)人員暈頭轉(zhuǎn)向,今天的這篇文章,將列出css和javascript在IE和Firefox中二十三個不同點(diǎn),希望對大家的學(xué)習(xí)有所幫助。
    2009-02-02
  • 微信小程序商品詳情頁規(guī)格屬性選擇示例代碼

    微信小程序商品詳情頁規(guī)格屬性選擇示例代碼

    這篇文章主要介紹了微信小程序商品詳情頁規(guī)格屬性選擇的示例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10

最新評論

栖霞市| 钟山县| 五莲县| 东乌珠穆沁旗| 木兰县| 香河县| 商河县| 井研县| 库尔勒市| 从化市| 淮滨县| 神农架林区| 越西县| 通山县| 龙海市| 宁晋县| 桑植县| 商河县| 庆云县| 伊春市| 昭苏县| 濉溪县| 乌鲁木齐县| 义马市| 平安县| 南汇区| 华宁县| 东台市| 新蔡县| 岳普湖县| 和田县| 津南区| 安图县| 师宗县| 监利县| 江津市| 炉霍县| 克什克腾旗| 谷城县| 徐闻县| 许昌市|