【CSS练习】万年历 html+css+js

效果图

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>

    <style>
      body {
        margin: 0;
      }

      #box {
        width: 600px;
        margin: 50px auto;
        border: 1px solid blue;
      }

      #box header {
        height: 50px;
        line-height: 50px;
        text-align: center;
        color: #fff;
        background-color: #17a;
        padding: 0 10px;
      }

      #box header span {
        cursor: pointer;
      }

      #box header span.fl {
        float: left;
      }

      #box header span.fr {
        float: right;
      }

      #box header div {
        font-size: 30px;
      }

      #box table {
        border-right: 1px solid #ccc;
        border-bottom: 1px solid #ccc;
      }

      #box table th,
      #box table td {
        border-left: 1px solid #ccc;
        border-top: 1px solid #ccc;
        text-align: center;
        height: 30px;
      }
    </style>
  </head>
  <body>
    <div id="box">
      <!-- <header>
            <span class="fl">上个月</span>
            <span class="fr">下个月</span>
            <div>2021年10月</div>
        </header>
        <table width="100%" cellspacing="0" cellpadding="0">
            <thead>
                <tr>
                    <th class="red">周日</th>
                    <th>周一</th>
                    <th>周二</th>
                    <th>周三</th>
                    <th>周四</th>
                    <th>周五</th>
                    <th>周六</th>
                </tr>
            </thead>

            <tbody>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
                <tr>
                    <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
                </tr>
            </tbody>
        </table> -->
    </div>
  </body>

  <script src="jquery-3.5.1.min.js"></script>
  <script>
    $(function () {
      var defaultDate = new Date(2021, 9);
      var box = $("#box");
      var yearMonthTitleDiv = null;
      var prevMonthSpan = null;
      var nextMonthSpan = null;
      var tBody = null;
      var allTd = [];

      // 创建静态布局
      create();
      // 显示当前日期对应的日历
      showDate();

      function create() {
        var header = $(`
        <header>
            <span class="fl">上个月</span>
            <span class="fr">下个月</span>
            <div>2021年10月</div>
        </header>
        `);
        box.append(header);
        yearMonthTitleDiv = header.find("div");
        prevMonthSpan = header.find(".fl");
        nextMonthSpan = header.find(".fr");

        var table = $(
          `
        <table width="100%" cellspacing="0" cellpadding="0">
            <thead>
                <tr>
                    <th class="red">周日</th>
                    <th>周一</th>
                    <th>周二</th>
                    <th>周三</th>
                    <th>周四</th>
                    <th>周五</th>
                    <th>周六</th>
                </tr>
            </thead>

            <tbody>
            </tbody>
          </table>
        `
        );

        box.append(table);
        tBody = table.find("tbody");
        for (var i = 0; i < 6; i++) {
          var tr = $("<tr></tr>");
          for (var k = 0; k < 7; k++) {
            var td = $("<td></td>");
            tr.append(td);
            allTd.push(td);
          }
          tBody.append(tr);
        }
      }

      function showDate() {
        var year = defaultDate.getFullYear(); //年:2021
        var month = defaultDate.getMonth() + 1; //月:10
        yearMonthTitleDiv.text(year + "年" + month + "月");
        // 获取本月1号是星期几
        var week = new Date(year, month - 1, 1).getDay(); //1号是星期几
        // 获取本月最后一天是几号,表示本月有多少天
        var days = new Date(year, month, 0).getDate(); //当前月前一个月的最后一天的日期

        var n = 1;
        for (let i = 0; i < allTd.length; i++) {
          allTd[i].empty();
          if (i >= week && n <= days) {
            allTd[i].text(n);
            n++;
          }
        }

        if(allTd[28].text()===''){
          allTd[28].parent().hide();
          allTd[35].parent().hide();
        }else if(allTd[35].text()===''){
          allTd[35].parent().hide();
        }
        else{
          allTd[28].parent().show();
          allTd[35].parent().show();
        }
      }

      $("#box span").click(function () {
        var year = defaultDate.getFullYear(); //年:2021
        var month = defaultDate.getMonth(); //月:10

        if ($(this).index() == 0) {
          month--;
        } else {
          month++;
        }
        defaultDate = new Date(year, month);
        showDate();
      });
    });
  </script>
</html>
相关推荐
堕落年代1 分钟前
Vue主流的状态保存框架对比
前端·javascript·vue.js
没资格抱怨3 分钟前
el-pagination的使用说明
javascript·vue.js·elementui
冴羽12 分钟前
Svelte 最新中文文档教程(22)—— Svelte 5 迁移指南
前端·javascript·svelte
青红光硫化黑21 分钟前
React基础之useEffect
javascript·react.js·ecmascript
剪刀石头布啊24 分钟前
css属性值计算过程
前端·css
bin915329 分钟前
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14基础固定表头示例
前端·javascript·vue.js·ecmascript·deepseek
二川bro36 分钟前
TensorFlow.js 全面解析:在浏览器中构建机器学习应用
javascript·机器学习·tensorflow
颜酱36 分钟前
后台系统从零搭建(三)—— 具体页面之部门管理(抽离通用的增删改查逻辑)
前端·javascript·react.js
qq_3325394537 分钟前
JavaScript性能优化实战指南
前端·javascript·性能优化
wkj0011 小时前
Vue 项目中,.env文件怎么用?
前端·javascript·vue.js