ホームページ  >  記事  >  ウェブフロントエンド  >  HTML簡易カレンダーの実装(ソースコード添付)

HTML簡易カレンダーの実装(ソースコード添付)

烟雨青岚
烟雨青岚転載
2020-06-16 12:32:0811316ブラウズ

HTML簡易カレンダーの実装(ソースコード添付)

html 簡易カレンダーの実装(ソースコード添付)

カレンダー表示はWebページのさまざまな場所で使用されます。 . 選択など この記事ではhtml、css、javascriptを使用して簡単なカレンダーを実装します。完了後はページ左側のエフェクトと同様になり、前月と翌月を切り替えることができます。実際の状況に応じて拡張することも可能です。

html

HTML 部分は比較的単純で、div を宣言し、JavaScript で特定の HTML を生成します。全体的な内容は大まかに次のとおりです。

<!doctype html>
<html>
<head>
  <meta charset=&#39;utf-8&#39;>
  <link rel=&#39;stylesheet&#39; href=&#39;外部的css文件路径&#39; />  
  <title>demo</title>
</head>
<body>
  <div class=&#39;calendar&#39; id=&#39;calendar&#39;></div>
  <script type=&#39;text/javascript&#39; src=&#39;外部的javascript文件路径&#39;></script>
</body>
</html>

css

/* 整体设置 */
*{margin:0px;padding:0px;}
/**
 * 设置日历的大小
 */
.calendar{
  width: 240px;
  height: 400px;
  display: block;
}
/**
 * 设置日历顶部盒子
 */
.calendar .calendar-title-box{
  position: relative;
  width: 100%;
  height: 36px;
  line-height: 36px;
  text-align:center;
  border-bottom: 1px solid #ddd;
}
/**
 * 设置上个月的按钮图标
 */
.calendar .prev-month {
  position: absolute;
  top: 12px;
  left: 0px;
  display: inline-block;
  width: 0px;
  height: 0px;
  border-left: 0px;
  border-top: 6px solid transparent;
  border-right: 8px solid #999;
  border-bottom: 6px solid transparent;
  cursor: pointer;
}
/**
 * 设置下个月的按钮图标
 */
.calendar .next-month {
  position: absolute;
  top: 12px;
  right: 0px;
  display: inline-block;
  width: 0px;
  height: 0px;
  border-right: 0px;
  border-top: 6px solid transparent;
  border-left: 8px solid #999;
  border-bottom: 6px solid transparent;
  cursor: pointer;
}
/* 设置日历表格样式 */
.calendar-table{
  width: 100%;
  border-collapse: collapse;
  text-align:center;
}
/* 表格行高 */
.calendar-table tr{
  height: 30px;
  line-height: 30px;
}
/* 当前天 颜色特殊显示 */
.currentDay {
  color: red;
}
/* 本月 文字颜色 */
.currentMonth {
  color: #999;
}
/* 其他月颜色 */
.otherMonth{
  color: #ede;
}

スタイルの設定については基本的に何も言うことはなく、いくつかの簡単な設定のみです。たとえば、「先月」と「来月」を表す特別なアイコンは、CSS の border 属性を使用して絶対的に配置され、スタイルが設定されます。

javascript Date オブジェクト

正式な JS コードを開始する前に、JS の Date オブジェクトを理解する必要があります。Date オブジェクトを通じて、年、月を取得できます。 、日、時、分、秒、タイムスタンプおよびその他の情報は、http://www.w3school.com.cn/jsref/jsref_obj_date.asp

var d1 = new Date(); / を参照してください。 / 現在のシステム時刻を取得します。現在の時刻は、2016 年 4 月 25 日月曜日です。

d1.getFull Year(); // 年の情報を取得します。2016

d1.getMonth(); / / 月の情報を取得します (範囲は 0:0-11 から始まります) 3

d1.getDate(); // ここで日の情報を取得します。結果は次のようになります: 25

d1.getDay (); // ここで週の情報 (0-6) を取得します 結果: 1

初期化中に年、月、日の情報を直接設定することもできます

# 3 月 15 日を設定します2016

var d2 = new Date(2016, 2, 15); // 月は 0 から数え始め、1 ずつ引く必要があります

d2.getFull Year(); // 2016

d2.getMonth(); // 2

d2.getDate (); 何日かという質問は、js では非常に簡単です。当月の場合、js は自動的に翌月まで計算します。たとえば、4 月は 30 日しかありません。31 日に設定すると、取得される日付の種類は自動的に 5 月 1 日として計算されます。5 月 0 日に設定すると、タイプは自動的に計算されます。 , js では 4 月 30 日として処理され、5 月 1 日は 4 月 29 日になります

var d3 = new Date(2016, 3, 30);
d3.toLocaleDateString();      // "2016/4/30"
var d4 = new Date(2016, 3, 31);
d4.toLocaleDateString();      // "2016/5/1"
var d5 = new Date(2016, 3, 33);
d5.toLocaleDateString();      // "2016/5/3"
var d6 = new Date(2016, 4, 1);
d6.toLocaleDateString();      // "2016/5/1"
var d7 = new Date(2016, 4, 0);
d7.toLocaleDateString();      // "2016/4/30"
var d8 = new Date(2016, 4, -3);
d8.toLocaleDateString();      // "2016/4/27"

javascript

js の Date オブジェクトの基本的な使い方を理解したら、次はステップはコード実装部分であり、全体的な考え方は次のとおりです: グローバル dateObj 変数を定義して、月情報テーブルに表示する必要がある年を記録します。タイトルの内容は dateObj から取得され、テーブル内の日付は dateObj から取得され、年と月に対応する 1 番目の情報がすべて決定され、テーブルの最初の行の 1 番目の位置が決定されます。がわかり、先月も逆算でき、数日分のデータ、今月、来月のデータがプッシュされます。 #具体的な手順:

1. dateObj 変数を宣言し、初期値を現在のシステム時刻に割り当てます

2. カレンダー div で HTML 要素をレンダリングします。

3. dateObj を通じて月の 1 日の情報を取得し、これを使用してテーブル内のすべての日付を走査します

4. イベントを前月と翌月のアイコンにバインドします

(function(){
  /*
   * 用于记录日期,显示的时候,根据dateObj中的日期的年月显示
   */
  var dateObj = (function(){
    var _date = new Date();    // 默认为当前系统时间
    return {
      getDate : function(){
        return _date;
      },
      setDate : function(date) {
        _date = date;
      }
    };
  })();
  // 设置calendar div中的html部分
  renderHtml();
  // 表格中显示日期
  showCalendarData();
  // 绑定事件
  bindEvent();
  /**
   * 渲染html结构
   */
  function renderHtml() {
    var calendar = document.getElementById("calendar");
    var titleBox = document.createElement("div");  // 标题盒子 设置上一月 下一月 标题
    var bodyBox = document.createElement("div");  // 表格区 显示数据
    // 设置标题盒子中的html
    titleBox.className = &#39;calendar-title-box&#39;;
    titleBox.innerHTML = "<span class=&#39;prev-month&#39; id=&#39;prevMonth&#39;></span>" +
      "<span class=&#39;calendar-title&#39; id=&#39;calendarTitle&#39;></span>" +
      "<span id=&#39;nextMonth&#39; class=&#39;next-month&#39;></span>";
    calendar.appendChild(titleBox);    // 添加到calendar div中
    // 设置表格区的html结构
    bodyBox.className = &#39;calendar-body-box&#39;;
    var _headHtml = "<tr>" + 
              "<th>日</th>" +
              "<th>一</th>" +
              "<th>二</th>" +
              "<th>三</th>" +
              "<th>四</th>" +
              "<th>五</th>" +
              "<th>六</th>" +
            "</tr>";
    var _bodyHtml = "";
    // 一个月最多31天,所以一个月最多占6行表格
    for(var i = 0; i < 6; i++) {  
      _bodyHtml += "<tr>" +
              "<td></td>" +
              "<td></td>" +
              "<td></td>" +
              "<td></td>" +
              "<td></td>" +
              "<td></td>" +
              "<td></td>" +
            "</tr>";
    }
    bodyBox.innerHTML = "<table id=&#39;calendarTable&#39; class=&#39;calendar-table&#39;>" +
              _headHtml + _bodyHtml +
              "</table>";
    // 添加到calendar div中
    calendar.appendChild(bodyBox);
  }
  /**
   * 表格中显示数据,并设置类名
   */
  function showCalendarData() {
    var _year = dateObj.getDate().getFullYear();
    var _month = dateObj.getDate().getMonth() + 1;
    var _dateStr = getDateStr(dateObj.getDate());
    // 设置顶部标题栏中的 年、月信息
    var calendarTitle = document.getElementById("calendarTitle");
    var titleStr = _dateStr.substr(0, 4) + "年" + _dateStr.substr(4,2) + "月";
    calendarTitle.innerText = titleStr;
    // 设置表格中的日期数据
    var _table = document.getElementById("calendarTable");
    var _tds = _table.getElementsByTagName("td");
    var _firstDay = new Date(_year, _month - 1, 1);  // 当前月第一天
    for(var i = 0; i < _tds.length; i++) {
      var _thisDay = new Date(_year, _month - 1, i + 1 - _firstDay.getDay());
      var _thisDayStr = getDateStr(_thisDay);
      _tds[i].innerText = _thisDay.getDate();
      //_tds[i].data = _thisDayStr;
      _tds[i].setAttribute(&#39;data&#39;, _thisDayStr);
      if(_thisDayStr == getDateStr(new Date())) {    // 当前天
        _tds[i].className = &#39;currentDay&#39;;
      }else if(_thisDayStr.substr(0, 6) == getDateStr(_firstDay).substr(0, 6)) {
        _tds[i].className = &#39;currentMonth&#39;;  // 当前月
      }else {    // 其他月
        _tds[i].className = &#39;otherMonth&#39;;
      }
    }
  }
  /**
   * 绑定上个月下个月事件
   */
  function bindEvent() {
    var prevMonth = document.getElementById("prevMonth");
    var nextMonth = document.getElementById("nextMonth");
    addEvent(prevMonth, &#39;click&#39;, toPrevMonth);
    addEvent(nextMonth, &#39;click&#39;, toNextMonth);
  }
  /**
   * 绑定事件
   */
  function addEvent(dom, eType, func) {
    if(dom.addEventListener) {  // DOM 2.0
      dom.addEventListener(eType, function(e){
        func(e);
      });
    } else if(dom.attachEvent){  // IE5+
      dom.attachEvent(&#39;on&#39; + eType, function(e){
        func(e);
      });
    } else {  // DOM 0
      dom[&#39;on&#39; + eType] = function(e) {
        func(e);
      }
    }
  }
  /**
   * 点击上个月图标触发
   */
  function toPrevMonth() {
    var date = dateObj.getDate();
    dateObj.setDate(new Date(date.getFullYear(), date.getMonth() - 1, 1));
    showCalendarData();
  }
  /**
   * 点击下个月图标触发
   */
  function toNextMonth() {
    var date = dateObj.getDate();
    dateObj.setDate(new Date(date.getFullYear(), date.getMonth() + 1, 1));
    showCalendarData();
  }
  /**
   * 日期转化为字符串, 4位年+2位月+2位日
   */
  function getDateStr(date) {
    var _year = date.getFullYear();
    var _month = date.getMonth() + 1;    // 月从0开始计数
    var _d = date.getDate();
    _month = (_month > 9) ? ("" + _month) : ("0" + _month);
    _d = (_d > 9) ? ("" + _d) : ("0" + _d);
    return _year + _month + _d;
  }
})();
本例中并没有添加点击表格中日期时候的事件,可以在bindEvent函数中添加如下代码获取所点击日期的信息 
var table = document.getElementById("calendarTable");
var tds = table.getElementsByTagName(&#39;td&#39;);
for(var i = 0; i < tds.length; i++) {
  addEvent(tds[i], &#39;click&#39;, function(e){
    console.log(e.target.getAttribute(&#39;data&#39;));
  });
}

皆さん、読んでいただきありがとうございます。多くのメリットが得られることを願っています。

この記事は、https://blog.csdn.net/qq_39198420/article/details/78402873

から転載されたものです:「

HTML チュートリアル

以上がHTML簡易カレンダーの実装(ソースコード添付)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。