2021-08-23

JS简单日历的制作

在这里插入图片描述

HTML 先创建一个简单布局

        <div class="header">
            <span class="top">上</span>
            <span class="title"></span>
            <span class="bottom">下 </span>
        </div>
        <div class="content">
            <ul class="week">
                <li>一</li> 
                <li>二</li>
                <li>三</li>
                <li>四</li>
                <li>五</li>
                <li>六</li>
                <li>七</li>
            </ul>
            <ul class="riqi">
            </ul>
        </div>
    </div>

CSS

        *{padding: 0;margin: 0m;list-style: none;color: #fff;}
        a{text-decoration: none;}
        .box{
            width: 400px;
            height: 400px;
            margin: 80px auto;
            background-color: #000;
            font-size: 20px;
        }
        .header{
            padding-top: 10px;
            height: 40px;
            color: red;
            line-height: 30px;
            display: flex;
            justify-content: space-evenly;
        }
        .content{
            line-height: 40px;
        }
        .week{
            display: flex;
            justify-content: space-evenly;
        }
        .riqi{
            text-align: center;
           padding: 0 10px ;
            display: flex;
            flex-wrap: wrap;
        }
        .riqi li{
            width: 14%;
        }
        .last,.next{
            color:  grey;
        }

JavaScript
首先需要封装四个函数,提公共部分

传入一个日期,返回该月的第一天 是星期几? (星期天)

    function getFirstDayWeek(date) {
        date = new Date(date); //根据原日期得到新日期 => 重新赋值给形参
        date.setDate(1);
        var week = date.getDay();
        week = week == 0 ? 7 : week;
        //getDay范围为0-6
        return week;
    }

传入一个日期,返回该日期对应的上个月有多少天? (上个月)

   function getLastMonthDay(date) {
        date = new Date(date);
        date.setDate(0);
        //日期改为0跳转到上个月的最后一天
        var lastDate = date.getDate();
        return lastDate;
    }

传入一个日期,返回该日期对应的月有多少天? (当前月)

    function getMonthDay(date) {
        date = new Date(date);
        date.setDate(6);
        //先把date改为小于28的日期,防止在31号时遇到下个月是30天的情况,日期会自动跳转到下下个月的一号。                                      
        date.setMonth(date.getMonth() + 1);
        date.setDate(0);
        return date.getDate();
    }

生成日历

   function createDate() {
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        title.innerText = `${year}${month}`;
		
        var week = getFirstDayWeek(date);
        var lastDate = getLastMonthDay(date);
        var nowDate = getMonthDay(date);

        var html = "";
        for (var i = lastDate - (week - 1) + 1; i <= lastDate; i++) {
            html += `<li class="last">${i}</li>`;
        }
        //上个月剩余天数排列
        for (var i = 1; i <= nowDate; i++) {
            html += `<li>${i}</li>`;
            
        }
        //当前月天数排列
        for (var i = 1; i <= (42 - (week - 1) - nowDate); i++) {
            html += `<li class="next">${i}</li>`
        }
        //下个月的天数:42-上个月剩余-本月天数
        console.log(i);
        riqi.innerHTML = html;
    }

JS部分

<script type ="text/javascript">
    var title = document.getElementsByClassName("title")[0];
    var riqi = document.getElementsByClassName("riqi")[0];
    var shang = document.getElementsByClassName("top")[0];
    var xia = document.getElementsByClassName("bottom")[0];

    var date = new Date();
    createDate();

    shang.onclick = function(){
        date.setDate(1);
        date.setMonth(date.getMonth()-1);

        createDate();
    }

    
    xia.onclick = function(){
        date.setDate(1);
        date.setMonth(date.getMonth()+1);

       createDate();
    }
</script>
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值