zoukankan      html  css  js  c++  java
  • JS写一个简单日历

    JS写一个日历,配合jQuery操作DOM

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Calendar</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                list-style: none;
            }
    
            header {
                text-align: center;
                line-height: 40px;
            }
    
            main {
                margin-top: 100px;
            }
    
            main div {
                margin: 20px;
                text-align: center;
            }
    
            .full-date {
                margin: 0 20px;
                vertical-align: middle;
            }
    
            .left,
            .right {
                border: 1px solid #add8e6;
                padding: 5px 10px;
            }
    
            ul {
                margin: 0 40px 10px;
            }
    
            ul li {
                display: inline-block;
                 40px;
                text-align: center;
                line-height: 40px;
            }
    
            .title li {
                 35px;
            }
        </style>
    </head>
    
    <body>
        <header>
            简单日历
        </header>
        <main>
            <div>
                <span class="left"><</span>
                <span class="full-date">2019/1/1</span>
                <span class="right">></span>
            </div>
            <ul class="title">
                <li>日</li>
                <li>一</li>
                <li>二</li>
                <li>三</li>
                <li>四</li>
                <li>五</li>
                <li>六</li>
            </ul>
            <section id="date"></section>
        </main>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.js"></script>
        <script>
            const Calendar = { // 实现日历方法
                date: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
                now: new Date(),
                result: [],
                need: false,
                init(needOther) {
                    this.result = [];
                    this.need = needOther;
                    let data = [],
                        temp = [];
                    if (this.leapYear(this.now)) { // 根据是否是闰年修改日期数组
                        this.date[1] = 29;
                    } else {
                        this.date[1] = 28;
                    }
                    for (let i = 1; i <= this.date[this.now.getMonth()]; i++) { // 添加本月日期
                        data.push(i);
                    }
                    if (this.need) { // 是否需要其他日期
                        for (let i = 1; i <= this.getFirstWeek(this.now); i++) { // 添加上月日期
                            let num = 0;
                            if (this.now.getMonth() === 0) {
                                num = this.date[11];
                            } else {
                                num = this.date[this.now.getMonth() - 1];
                            }
                            data.unshift(num - i + 1);
                        }
                        for (let i = 1;; i++) { // 添加下月日期
                            if (data.length % 7 === 0) {
                                break;
                            } else {
                                data.push(i);
                            }
                        }
                    } else {
                        for (let i = 1; i <= this.getFirstWeek(this.now); i++) { // 添加上月空白日期
                            data.unshift('');
                        }
                    }
                    for (let i = 1; i <= data.length; i++) { // 转换为二维数组
                        temp.push(data[i - 1]);
                        if (i % 7 === 0) {
                            this.result.push(temp);
                            temp = [];
                        }
                    }
                    this.result.push(temp);
                },
                getFirstWeek(time) { // 获取每月1号是星期几
                    const date = new Date(time.getFullYear(), time.getMonth());
                    return date.getDay();
                },
                leapYear(time) { // 判断闰年
                    const year = new Date(time).getFullYear();
                    return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
                },
                preMonth() { // 下个月
                    if (this.now.getMonth() === 0) {
                        this.now = new Date(this.now.getFullYear() - 1, 11, this.now.getDate());
                    } else {
                        this.now = new Date(this.now.getFullYear(), (this.now.getMonth()) - 1, this.now.getDate());
                    }
                    this.init(this.need);
                },
                nextMonth() { // 上个月
                    if (this.now.getMonth() === 11) {
                        this.now = new Date(this.now.getFullYear() + 1, 0, this.now.getDate());
                    } else {
                        this.now = new Date(this.now.getFullYear(), this.now.getMonth() + 1, this.now.getDate());
                    }
                    this.init(this.need);
                }
            }
            $(function () {
                Calendar.init();
                const render = () => {
                    const nowDate = Calendar.now;
                    $('.full-date').text(
                        `${nowDate.getFullYear()}/${nowDate.getMonth() + 1}/${nowDate.getDate()}`);
                    Calendar.result.forEach(item => {
                        let html = '<ul>';
                        item.forEach(data => {
                            html += `<li>${data}</li>`;
                        });
                        html += '</ul>';
                        $('#date').append(html);
                    });
                };
                render();
                $('.left').click(() => {
                    $('#date').empty();
                    Calendar.preMonth();
                    render();
                });
                $('.right').click(() => {
                    $('#date').empty();
                    Calendar.nextMonth();
                    render();
                });
            });
        </script>
    </body>
    
    </html>
    
  • 相关阅读:
    《家庭财务总管》升级了(1.0.0.1)
    谁拥有接口?
    VScode调试C++工程
    NVIDIA显卡原生管理查询功能nvidiasmi的部分使用功能
    python版本的两款NVIDIA显卡管理查询工具
    pytorch之网络参数统计 torchstat & torchsummary
    电脑、笔记本、手机维修经验分享网站,专业领域网站
    Python使用pynvml查看GPU信息
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    笔记本挑电源适配器吗,是不是电压相同情况下保证功率大于等于原装适配器就可以保证笔记本正常运行???
  • 原文地址:https://www.cnblogs.com/ljwk/p/10321630.html
Copyright © 2011-2022 走看看