jQuery中动态日历勾选效果

 2023-10-30    82  

           效果图:

勾选效果

1.gif

按钮变换样式

1.gif

在效果中可以看到 当点击日历是会出现勾选的效果 并且当勾选的数量大于21天时下面的样式会变成抽奖按钮 

html:

在视图层写好基本结构 数据通过js进行动态添加

<div class="items">
      <div class="main">
        <div class="tab-title">
          <h2>2023年10月</h2>
        </div>
        <div class="tab-content">
   
        </div>
      </div>
    </div>
    <div class="text">
      <span style="color: red">*规则:本月签到21天即可领取奖品</span>
    </div>

在js中当页面载入时将星期 天数 以及声明一个计数器  接下来就是创建标签的时候

image.png

首先是添加星期 先创建一个空字符串th 通过遍历的方式 将dataDay长度进行遍历 然后将遍历的dataDay对应下标的值都加入到th当中通过模板字符串

创建的标签中 遍历完成之后再声明一个变量创建父节点标签 并且将th添加进入 最后插入到视图层  

image.png

预览:

image.png

紧接着就可以开始遍历天数了 将dates进行for循环遍历 这里天数是七个一排 所以 我们只能在一个父节点中添加七个子节点 

使用最贱最简单的方法 判断j的数值进行切换节点  再进行向父节点添加标签之后 将td里面的内容清空 用作下一次循环 不造成堆积

image.png

这里由于操作重复我们将它封装成一个函数 通过传值进行操作

image.png

最后当超出28天时等于的在循环外 进行节点的创建添加

image.png

给点击的日期进行勾选效果 由于标签都是动态添加的所以 这里需要对操作的标签进行监听 点击对应的标签进行样式添加 并且进行计算

当count 等于21时 将页面中的span标签删除 创建一个button标签 将它插入到页面当中

image.png

完整代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>日历勾选效果</title>
    <style>
      * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
      }
      .items {
        width: 97vw;
        min-width: 1000px;
      }
      .main {
        box-sizing: border-box;
        margin: 20px;
        width: 100%;
        font-size: 16px;

        border: 1px solid #ccc;
      }
      .main .tab-title h2 {
        text-align: center;
        height: 40px;
        line-height: 40px;
        width: 100%;
        color: #999;
        font-weight: 200px;
        font-size: 18px;
      }
      .tab-content {
        display: table;
        border-collapse: separate;
        width: 100%;
        font-family: "Microsoft YaHei";
      }
      .tab-content .tab-row {
        display: table-row;
        width: 100%;
      }
      .tab-content .tab-row div {
        user-select: none;
        cursor: pointer;
        border: 1px solid #e3e3e3;
        display: table-cell;
        width: 14.28%;
        height: 40px;
        text-align: center;
        line-height: 40px;
      }
      .tab-content .tab-row div.bold {
        font-weight: bold;
      }
      .text {
        position: relative;
        text-align: center;
        width: 100%;
        /* padding: 15px; */
        font-size: 14px;
      }
      .tab-content .tab-row div.cur {
        background: url(./img/sign_have.gif) center no-repeat;
        width: 20px;
        height: 20px;
      }
      .btn {
        cursor: pointer;
        line-height: 30px;
        background: #00a0e9;
        border: none;
        color: white;
        border-radius: 30px;
        padding: 0 10px;
        font-size: 16px;
      }
      .btn:hover {
        background: red;
      }
    </style>
  </head>
  <body>
    <div class="items">
      <div class="main">
        <div class="tab-title">
          <h2>2023年10月</h2>
        </div>
        <div class="tab-content">
   
        </div>
      </div>
    </div>
    <div class="text">
      <span style="color: red">*规则:本月签到21天即可领取奖品</span>
    </div>
  </body>
</html>
<script src="./js/jquery.js"></script>
<script>
  $(document).ready(function () {
    // 星期
    var dateDay = ["日", "一", "二", "三", "四", "五", "六"];
//    天数
    var dates = 31;
    // 计数器
    var count = 0;
    let th = "";
    // 遍历将星期节点创建
    for (var i = 0; i < dateDay.length; i++) {
      th += `<div class="th-1 bold">${dateDay[i]}</div>`;
    }
    let tr = `<div class="tab-row">${th}</div>`;
    $(".main .tab-content").append(tr);
    // 遍历将当前月份天数遍历
    let td = "";
    function val(value) {
      let trS = `<div class="tab-row">${value}</div>`;
      $(".main .tab-content").append(trS);
    }
    for (let j = 1; j <= dates; j++) {
      td += `<div class="td-1 td">${[j]}</div>`;
      if (j == 7) {
        val(td);
        td = "";
      } else if (j == 14) {
        val(td);
        td = "";
      } else if (j == 21) {
        val(td);
        td = "";
      } else if (j == 28) {
        val(td);
        td = "";
      }
    }
    val(td);
    $(".tab-row").on("click", ".td", function () {
      $(this).addClass("cur");
      count++;
      if (count === 21) {
        $(".text").children("span").remove();
        var p = `<button class="btn">已达标,获取一次抽奖</button>`;
        $(".text").append(p);
      }
    });
  });
</script>


  •  标签:  

原文链接:http://1.15.94.33/?id=161

=========================================

http://1.15.94.33/ 为 “前端日记簿” 唯一官方服务平台,请勿相信其他任何渠道。