用js实现一个简单可翻页的日历

本文介绍了如何使用JavaScript编写一个可交互的日历组件,包括动态头部年月显示,自动计算并渲染上月、本月和下月的天数,以及通过点击按钮实现月份的前后翻页。通过代码实例详细展示了如何使用Date对象和数组操作来实现这一功能。
摘要由CSDN通过智能技术生成

用js实现一个简单可翻页的日历

1 动态渲染头部年月
2 获取上月本月及下月要显示的天数
3 上下翻页切换月份

 <div class="box">
        <div class="header">
            <span class="prev"></span>
            <span class="current"></span>
            <span class="next"></span>
        </div>
        <ul class="week">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <ul class="content">
           
        </ul>
    </div>

下面是css的样式

<style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }

        .box {
            width: 280px;
            height: 360px;
            margin: 50px auto;
            background-color: black;
            color: aliceblue;
            line-height: 40px;
        }

        .header {
            height: 40px;
            color: aliceblue;
            line-height: 40px;
        }

        .header span {
            float: left;
            text-align: center;
            margin-top: 10px;
            line-height: 40px;
        }

        .prev,
        .next {
            width: 20%;
            line-height: 40px;
            cursor: pointer;
        }

        .current {
            width: 60%;
            line-height: 40px;
            color: red;
        }

        .week li {
            width: 40px;
            text-align: center;
            float: left;
            line-height: 40px;
        }

        .content li {
            width: 40px;
            text-align: center;
            float: left;
            line-height: 40px;
        }
    </style>

下面是js的代码

    <script>
        //思路:最重要的就是每月的第零天就是上月的最大天数,计算出本月第一个星期之后上月剩下的日子填充进来
        var oCon = document.querySelector(".content")
        // shangYue(date)
        function shangYue(date){
        var date = new Date(date)
         //获取本月第一天星期几
         date.setDate(1)
          var week = date.getDay()
          console.log(week);
          //获取上月有多少天
          date.setDate(0)
          var maxDay = date.getDate()
          //设定一个空数组接受上个月剩下到这个月的值
          var list = []
          //用最大上月的天数减去本月的星期几加一就是上个月显示在本月的日期
          for(var i = maxDay - week +1; i<=maxDay ; i++){
              list.push(i)
              console.log(list);
          }
          return list
      }
      //获取本月的天数
      function benYue(date){
          var date = new Date(date)
           //设置月份加一
           date.setMonth(date.getMonth()+1)
          //设置天数为零
          date.setDate(0)
          var maxDay = date.getDate()
          //用新数组接收数据
          var list = []
          for(var i = 1 ;i <= maxDay;i++){
              list.push(i)
              console.log(list)
          }
          return list
      }
      //下个月的天数
      function xaiyue(shangYueTian,benyueTian){
        // var date = new Date(date)
        var list = []
        for(var i = 1;i <= 42-shangYueTian-benyueTian;i++){
            list.push(i)
        }
        return list
      }

      //渲染进页面
      function xuanRan(date){
          var date = new Date(date)
          var arr1 = shangYue(date)
          var arr2 = benYue(date)
          var arr3 = xaiyue(arr1.length,arr2.length)
          var res = ""
        //res接收数据
        for(var i = 0 ; i < arr1.length ;i++){
            //用字符串模板添加样式
            res += `<li style = "color:red;"> ${arr1[i]} </li>`
        }
        for(var i = 0 ; i < arr2.length ;i++){
            res += `<li> ${arr2[i]} </li>`
        }
        for(var i = 0 ; i < arr3.length ;i++){
            //用字符串模板添加样式
            res += `<li style = "color:red;"> ${arr3[i]} </li>`
        }
        //写进页面
        oCon.innerHTML = res
      } 

      //拿对象
      var oPrev = document.querySelector(".prev")
      var oNext = document.querySelector(".next")
      var oCurrent = document.querySelector(".current")
      //获取年月
      var date = new Date
      var nian = date.getFullYear()
      var yue = date.getMonth()+1
        oCurrent.innerHTML = nian + "年" + yue + "月"
      xuanRan(date)
      //前翻页点击事件
      oPrev.onclick = function(){
        //月份减一
        date.setMonth(date.getMonth()-1)
        var nian = date.getFullYear()
        var yue = date.getMonth()+1
        oCurrent.innerHTML = nian + "年" + yue + "月"
        xuanRan(date)
      }
      //后翻页点击事件
      oNext.onclick = function(){
        //月份加一
        date.setMonth(date.getMonth()+1)
        var nian = date.getFullYear()
        var yue = date.getMonth()+1
        oCurrent.innerHTML = nian + "年" + yue + "月"
        xuanRan(date)
      }
    </script>

页面加载完毕的时候的效果

页面后翻页倒下一个月的效果

页面前翻页到前一个月的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值