js超簡單日曆

来源:http://www.cnblogs.com/HiuYanChong/archive/2016/03/17/5289300.html
-Advertisement-
Play Games

用原生js寫了一個超級簡單的日曆。當做是練習js中的Date類型。 思路: html css js 效果圖:


用原生js寫了一個超級簡單的日曆。當做是練習js中的Date類型。

思路:

  1. 獲取某個日期,根據年份計算出每個月的天數。
  2. 利用Date中的getDay()知道該月份的第一天為星期幾。
  3. 迴圈創建表格,顯示日曆。

html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>JS簡單日曆</title>
 5     <meta http-equiv="Content-type" content="text/html" charset="utf-8">
 6     <link rel="stylesheet" type="text/css" href="Date.css">
 7 </head>
 8 <body>
 9     <div id="content">
10         <div id="dateInput">
11             <label>日期:(格式:yyyy-mm-dd)</label>
12             <input type="text" id="check">
13             <input type="button" id="changeDate" value="查詢">
14         </div>
15         <div id="calendar">
16             <div id="calendarHeader">
17                 <div>
18                     <img id="back" src="back.png">
19                     <span id="cur"></span>
20                     <img id="forward" src="forward.png">
21                 </div>
22             </div>
23             <div id="calendarTable">
24                 <table>
25                     <tbody>
26                         <tr>
27                             <th></th>
28                             <th></th>
29                             <th></th>
30                             <th></th>
31                             <th></th>
32                             <th></th>
33                             <th></th>
34                         </tr>
35                     </tbody>    
36                 </table>
37             </div>
38         </div>
39     </div>
40     <script type="text/javascript" src="Date.js"></script>
41 </body>
42 </html>

 

 css

 1 #dateInput {
 2     background: #33CCCC;
 3     color: white;
 4     font-weight: bold;
 5     max-width: 450px;
 6     margin: 0 auto;
 7     padding: 1em;
 8 }
 9 
10 #calendar {
11     max-width: 450px;
12     margin: 0 auto;
13     background: #5CCCCC;
14     padding: 1em;
15 }
16 
17 #back {
18     float: left;
19 }
20 
21 #forward {
22     float: right;
23 }
24 
25 #cur {
26     color: white;
27     font-size: 120%;
28     position: relative;
29     left: 30%;
30 }
31 
32 table {
33     max-width: 450px;
34     margin: 0 auto;
35     color: white;
36     padding: 1em;
37 
38 }
39 
40 th,td {
41     width: 50px;
42     padding: 10px;
43     text-align: center;
44 }
45 
46 td {
47     border:1px solid white;
48 }
49 
50 th {
51     background-color: #009999;
52 }
53 
54 .now {
55     background-color: #006363;
56 }

 

js

  1 var y, m;
  2 
  3 function addEvent(func) {
  4     var old = window.onload;
  5     if (typeof old === "function") {
  6         old();
  7         func();
  8     } else {
  9         window.onload = func;
 10     }
 11 }
 12 
 13 
 14 //設置日曆的標題
 15 function setCalendarTitle(obj) {
 16     var year = obj.getFullYear();
 17     var month = obj.getMonth() + 1;
 18     var title = ""+year+"年"+month+"月";
 19     y = year;
 20     m = month;
 21     var set = document.getElementById('cur');
 22     if (set.childNodes.length > 0)
 23         set.removeChild(set.childNodes[0]);
 24     var txt = document.createTextNode(title);
 25     set.appendChild(txt);
 26     var now = new Date(year, month-1, 1);
 27     calculateDay(now);
 28 }
 29 
 30 //計算當前月份有幾天,第一天是星期幾
 31 function is_leap(year) {
 32    return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0));
 33 }
 34 
 35 function day(year) {
 36     mDays = new Array(31,28+is_leap(year),31,30,31,31,30,31,30,31,30,31);
 37     return mDays;
 38 }
 39 
 40 function calculateDay(obj) {
 41     var dayArr = day(obj.getFullYear());
 42     var dayNum = dayArr[obj.getMonth()];
 43     var dayFirst = obj.getDay(); //0是星期天, 6是星期六
 44     var firstRow;
 45     if (dayFirst != 0) {
 46         firstRow = 8 - dayFirst;//第一行有日期的單元格個數,從右邊數
 47     } else {
 48         firstRow = 1;
 49     }
 50     var firstRowBlank = 7 - firstRow; //第一行空的個數
 51     var lastRow = (dayNum - firstRow) % 7; //最後一個有日期的單元格個數
 52     var lastRowBlank = 7 - lastRow;
 53     var RowNum = (dayNum - firstRow - lastRow) / 7 + 2;
 54     renderCalendar(RowNum, firstRow, firstRowBlank, lastRow, lastRowBlank);
 55 }
 56 
 57 function renderCalendar(RowNum, firstRow, firstRowBlank, lastRow, lastRowBlank) {
 58    var tbody = document.getElementsByTagName('tbody')[0];
 59    var tr = tbody.getElementsByTagName("tr");
 60    var len = tr.length;
 61    if (len > 1) {
 62            for (var index = 1; index < len; index++) {
 63                 tbody.removeChild(tr[1]);
 64            }
 65    }
 66    var i = 1; 
 67    var j = 1;
 68    for (; i <= RowNum; i++) {
 69            if (i == 1) {
 70                var row = document.createElement("tr");
 71                while(firstRowBlank > 0) {
 72                    var blank = document.createElement("td");
 73                    row.appendChild(blank);
 74                    firstRowBlank--;
 75                }
 76                while(firstRow > 0) {
 77                    var date = document.createElement("td");
 78                    var txt = document.createTextNode(j);
 79                    date.appendChild(txt);
 80                    row.appendChild(date);
 81                    j++;
 82                    firstRow--;
 83                }
 84                tbody.appendChild(row);
 85            } else if (i == RowNum && lastRow > 0) {
 86                var row = document.createElement("tr");
 87                while(lastRow > 0) {
 88                    var txt = document.createTextNode(j);
 89                    var date = document.createElement("td");
 90                    date.appendChild(txt);
 91                    row.appendChild(date);
 92                    j++;
 93                    lastRow--;
 94                }        
 95                while(lastRowBlank > 0) {
 96                    var blank = document.createElement("td");
 97                    row.appendChild(blank);
 98                    lastRowBlank--;
 99                }
100                tbody.appendChild(row);
101            } else {
102                var day = 7;
103                var row = document.createElement("tr");
104                while(day > 0) {
105                    var date = document.createElement("td");
106                    var txt = document.createTextNode(j);
107                    date.appendChild(txt);
108                    row.appendChild(date);
109                    j++;
110                    day--;
111                }
112                tbody.appendChild(row);
113            }
114    }
115 }
116 
117 //讀取系統當前時間,設置
118 function initiate() {
119     var now = new Date();
120     setCalendarTitle(now);
121 }
122 
123 function checkCalendar() {
124     var button = document.getElementById('changeDate');
125     button.onclick = function() {
126         var date = document.getElementById("check").value;
127         var newDate = new Date(Date.parse(date));
128         setCalendarTitle(newDate);
129     }
130 }
131 
132 function forwardMoth() {
133     var forward =  document.getElementById("forward");
134     forward.onclick = function() {
135         var year = y;
136         var month = m;
137         if ((month+1) <= 12) {
138             var newDate = new Date(year, month, 1);
139             setCalendarTitle(newDate);
140         } else {
141             var newDate = new Date(year+1, 0, 1);
142             setCalendarTitle(newDate);
143         }
144     }
145 }
146 
147 function backMonth() {
148     var back =  document.getElementById("back");
149     back.onclick = function() {
150         var year = y;
151         var month = m;
152         if ((month-1) >= 1) {
153             var newDate = new Date(year, month-2, 1);
154             setCalendarTitle(newDate);
155             m = month - 1;
156         } else {
157             var newDate = new Date(year-1, 11, 1);
158             setCalendarTitle(newDate);
159             m = 12;
160         }
161     }
162 }
163 
164 addEvent(initiate());
165 addEvent(checkCalendar());
166 addEvent(forwardMoth());
167 addEvent(backMonth());

 

效果圖:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個web前端的小白,聽前輩說寫好筆記很關鍵,so 特此用博客來開始記錄自己的旅程——Web之路 最近幾天看的HTML 1、糾正一個認知錯誤 “HTML是一種編程語言” ————(錯) HTML (全名:Hype Text Mark-up Language ) 超文本標記語言 ,它是一種描述性標記語
  • 模塊化:每個模塊只完成一個獨立的功能,然後提供該功能的介面。模塊間通過介面訪問。模塊中的(過程和數據)對於其它模塊來說是私有的(不能訪問修改) 原始人寫法: 這種寫法已經有點模塊的樣子了,一下就能看出這幾個函數和變數之間的聯繫。 缺點在於所有變數都必須聲明為公有,所以都要加this指示作用域以引用這
  • 現代web頁面里到處都是ajax,所以處理好非同步的代碼非常重要。 這次我重新選了個適合展示非同步處理的應用場景——搜索新聞列表。由於有現成的介面,我們就不用自己搭服務了。 我在網上隨便搜到了一個新聞服務介面,支持jsonp,就用它吧。 一開始,咱們仍然按照action->reducer->compon
  • 前些天,我朋友發了這個段CSS我。 Q:color是哪個? A: 000 不是麽? what the fuck !! 結果是 fff。作為一個頁面仔我表示。。。 經過修行,我弄得了它們的規矩。 在一大堆css規則中,到底哪個有效。這其實由這3個說的算 特殊性(權重)、重要性、繼承。 特殊性 簡單的說
  • 今天來簡單聊聊如何讓 innerHTML 進來的 scrip 代碼跑起來的問題。 前臺請求一個介面,介面返回一些 HTML 標簽拼接成的字元串,以供前端直接 innerHTML 生成 DOM 元素,這樣的做法非常普遍。但是你是否遇到過,如果字元串中拼接的 HTML 標簽中有 script 標簽,那麼
  • var str = 'hello world'; alert(str.toUpperCase());//將字元串轉換為大寫。 alert(str.toLowerCase());//將字元串轉換為小寫。 alert(str.toLocaleUpperCase());//也是將字元串轉換為大寫的一種方式
  • 一,同: Zepto最初是為移動端開發的庫,是jQuery的輕量級替代品,因為它的API和jQuery相似,而文件更小。Zepto最大的優勢是它的文件大小,只有8k多,是目前功能完備的庫中最小的一個,儘管不大,Zepto所提供的工具足以滿足開發程式的需要。大多數在jQuery中·常用的API和方法Z
  • html垂直居中
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...