js css+html实现简单的日历

下面是详细讲解“js css+html实现简单的日历”的完整攻略:

简介

在网页中添加日历是非常常见的需求。我们可以通过使用 HTML、CSS 和 JavaScript 来轻松制作一个基本的日历。其中,HTML 负责构建页面结构,CSS 实现样式美化,JavaScript 则用来处理各种交互和逻辑。

实现方法

1. HTML 结构

我们先来设立一个基本的 HTML 结构,如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>简单日历</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="calendar">
        <div class="month-header">
            <span class="prev-month">&#8249;</span>
            <h2 class="month"></h2>
            <span class="next-month">&#8250;</span>
        </div>
        <ul class="weekdays">
            <li>日</li>
            <li>一</li>
            <li>二</li>
            <li>三</li>
            <li>四</li>
            <li>五</li>
            <li>六</li>
        </ul>
        <ul class="days"></ul>
    </div>
    <script src="main.js"></script>
</body>
</html>

上面的代码中,我们创建了一个名为 calendar 的 div 元素,以及几个月份和日期相关的元素,包括当前月份的标题栏、星期几的栏和日期的栏。

2. CSS 样式

下面,我们为这些元素添加样式。在 style.css 文件中,加入如下代码:

body {
    font-family: Helvetica, Arial, sans-serif;
}

.calendar {
    width: 350px;
    margin: 50px auto;
    border: 1px solid #ccc;
}

.month-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 20px;
    color: #0089ff;
    background-color: #f5f5f5;
}

.prev-month,
.next-month {
    font-size: 20px;
    cursor: pointer;
}

.weekdays {
    display: flex;
    margin: 0;
    padding: 0;
    list-style: none;
    background-color: #eee;
}

.weekdays li {
    flex: 1;
    text-align: center;
    padding: 10px 0;
}

.days {
    display: flex;
    flex-wrap: wrap;
    margin: 0;
    padding: 0;
    list-style: none;
}

.days li {
    flex: 1;
    text-align: center;
    padding: 10px 0;
    border: 1px solid #ccc;
}

.days li.is-today {
    background-color: #0089ff;
    color: #fff;
}

上面的样式代码中,我们为各个元素都添加了合适的样式,让它们看起来像一个日历。

3. JavaScript 逻辑

最后,我们需要使用 JavaScript 添加逻辑,让日历能够动态展示不同月份和日期。在 main.js 文件中,加入如下代码:

// 获取元素
const monthEl = document.querySelector('.month');
const prevMonthEl = document.querySelector('.prev-month');
const nextMonthEl = document.querySelector('.next-month');
const daysEl = document.querySelector('.days');

// 获取当前年份、月份和日期
const currentDate = new Date();
let currentYear = currentDate.getFullYear();
let currentMonth = currentDate.getMonth();

// 定义月份和日期的数组
const months = [
    '一月',
    '二月',
    '三月',
    '四月',
    '五月',
    '六月',
    '七月',
    '八月',
    '九月',
    '十月',
    '十一月',
    '十二月'
];
const daysOfWeek = [
    '周日',
    '周一',
    '周二',
    '周三',
    '周四',
    '周五',
    '周六'
];

// 根据年份和月份计算天数
const daysInMonth = (month, year) => {
    return new Date(year, month+1, 0).getDate();
}

// 渲染日期列表
const renderCalendar = (month, year) => {
    monthEl.textContent = months[month] + ' ' + year; // 更新标题栏

    // 计算当月的第一天是星期几
    const firstDayOfMonth = new Date(year, month, 1).getDay();

    // 渲染前面的空白天数
    let daysHtml = '';
    for (let i = 0; i < firstDayOfMonth; i++) {
        daysHtml += '<li></li>';
    }

    // 渲染当月的日期
    const numDays = daysInMonth(month, year);
    for (let i = 1; i <= numDays; i++) {
        if (i === currentDate.getDate() && year === currentDate.getFullYear() && month === currentDate.getMonth()) {
            daysHtml += '<li class="is-today">' + i + '</li>';
        } else {
            daysHtml += '<li>' + i + '</li>';
        }
    }

    daysEl.innerHTML = daysHtml; // 更新日期列表
}

renderCalendar(currentMonth, currentYear);

// 处理月份切换
prevMonthEl.addEventListener('click', () => {
    currentMonth--;
    if (currentMonth < 0) {
        currentMonth = 11;
        currentYear--;
    }
    renderCalendar(currentMonth, currentYear);
});

nextMonthEl.addEventListener('click', () => {
    currentMonth++;
    if (currentMonth > 11) {
        currentMonth = 0;
        currentYear++;
    }
    renderCalendar(currentMonth, currentYear);
});

上述 JavaScript 代码中,我们获取了所需的元素,并定义了当前年份和月份变量。接下来,我们实现了两个函数 daysInMonth()renderCalendar()

  • daysInMonth():这个函数接收一个月份和年份作为参数,然后计算该月份的天数。这是一个辅助函数,用于后面的 renderCalendar() 函数中计算每个月的天数。

  • renderCalendar():这个函数接收一个月份和年份作为参数,并根据这些参数渲染出一个月的日历,包括日期的列表和标题栏。首先,它计算当月的第一天是星期几,并根据这个值在日历中渲染前面的空白天数;然后,它渲染出这个月的所有日期并添加到日期列表中。

最后,我们监听前一个月和后一个月按钮的点击事件,当点击时,更新页面上显示的年份和月份,然后重新渲染日历。

示例

下面给出两个示例,你可以在浏览器中运行这些代码来查看效果:

示例 1

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>简单日历</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="calendar">
        <div class="month-header">
            <span class="prev-month">&#8249;</span>
            <h2 class="month"></h2>
            <span class="next-month">&#8250;</span>
        </div>
        <ul class="weekdays">
            <li>日</li>
            <li>一</li>
            <li>二</li>
            <li>三</li>
            <li>四</li>
            <li>五</li>
            <li>六</li>
        </ul>
        <ul class="days"></ul>
    </div>
    <script src="main.js"></script>
    <script>
        const currentDate = new Date(2022, 4, 1);
        let currentYear = currentDate.getFullYear();
        let currentMonth = currentDate.getMonth();
        renderCalendar(currentMonth, currentYear);
    </script>
</body>
</html>

在这个示例中,我们设置当前日期为 2022 年 5 月 1 日。因此,当页面加载时,会默认显示 2022 年 5 月的日历。

示例 2

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>简单日历</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="calendar">
        <div class="month-header">
            <span class="prev-month">&#8249;</span>
            <h2 class="month"></h2>
            <span class="next-month">&#8250;</span>
        </div>
        <ul class="weekdays">
            <li>日</li>
            <li>一</li>
            <li>二</li>
            <li>三</li>
            <li>四</li>
            <li>五</li>
            <li>六</li>
        </ul>
        <ul class="days"></ul>
    </div>
    <script src="main.js"></script>
    <script>
        const currentDate = new Date();
        let currentYear = currentDate.getFullYear();
        let currentMonth = currentDate.getMonth();
        renderCalendar(currentMonth, currentYear);
    </script>
</body>
</html>

在这个示例中,我们将当前日期设置为系统当前日期。因此,当页面加载时,会默认显示系统当前年份和月份的日历。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js css+html实现简单的日历 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • javascript 面向对象,实现namespace,class,继承,重载

    JavaScript是一门面向对象的语言,并且它支持实现命名空间(namespace),类(class),继承(inheritance)和重载(overloading)等概念。下面我将详细讲解这些概念的实现过程及示例。 命名空间 在JavaScript中,命名空间可以通过对象字面量的方式实现。通过定义一个全局的对象,然后在该对象上定义属性和方法,就可以将它们…

    JavaScript 2023年5月27日
    00
  • 手把手教你如何排查Javascript内存泄漏

    为了让大家更好地了解如何排查JavaScript内存泄漏问题,以下是一份完整的攻略。 什么是JavaScript内存泄漏 JavaScript内存泄漏是指在JavaScript代码执行过程中,未使用的内存被长时间占用不释放的情况。这会导致内存溢出,进而影响代码的性能。 如何排查JavaScript内存泄漏 JavaScript内存泄漏问题很常见,但是很难被察…

    JavaScript 2023年6月10日
    00
  • JavaScript那些不经意间发生的数据类型自动转换

    JavaScript那些不经意间发生的数据类型自动转换 在使用JavaScript时,我们可能会遇到一些数据类型转换的问题。这些数据类型转换通常是自动发生的,而且往往只有在出现错误时才会引起我们的注意。本文将介绍哪些情况下会发生数据类型转换,并给出一些例子。 基础数据类型的自动转换 字符串转换 当JavaScript需要处理不同数据类型时,会自动进行类型转换…

    JavaScript 2023年6月10日
    00
  • js实现点击按钮弹出上传文件的窗口

    要实现点击按钮弹出上传文件的窗口,在前端开发中需要使用JavaScript。具体的实现方法有多种,可以通过原生JavaScript或使用一些现成的插件库来实现。本篇攻略将为大家介绍一种基于原生JavaScript的实现方式。 HTML部分(示例一) 首先,在HTML文件中需要创建一个按钮元素和一个file input元素,代码如下: <button i…

    JavaScript 2023年5月27日
    00
  • 原生JavaScript编写俄罗斯方块

    编写俄罗斯方块是一个非常有趣和实用的JavaScript项目。以下是一些步骤和示例代码,可以帮助您开始编写自己的俄罗斯方块游戏。 步骤一:创建HTML文件 首先,我们需要创建一个HTML文件,在其中添加一个canvas元素来展示俄罗斯方块游戏。以下是一个示例HTML文件: <!DOCTYPE html> <html> <head…

    JavaScript 2023年6月10日
    00
  • JS 数组随机洗牌的实例代码

    让我来详细讲解一下“JS 数组随机洗牌的实例代码”的完整攻略。 什么是数组随机洗牌 数组随机洗牌是指将一个数组中的元素随机打乱顺序的过程。通常用于游戏场景、抽奖等场景。 实现数组随机洗牌的步骤 下面是一份 JS 数组随机洗牌的实例代码,接下来我会详细讲解它: function shuffle(arr) { var len = arr.length; for(…

    JavaScript 2023年5月27日
    00
  • js中如何对url进行编码和解码

    在 JavaScript 中,有两种方式可以对 URL 进行编码和解码,分别是 encodeURI() 和 encodeURIComponent()。 encodeURI() encodeURI() 方法用于将 URI (Uniform Resource Identifier) 进行编码,但是不会对一些特殊字符 (;,/?:@&=+$#) 进行编码。…

    JavaScript 2023年5月20日
    00
  • 超越Jquery_01_isPlainObject分析与重构

    超越Jquery_01_isPlainObject分析与重构 1. isPlainObject函数分析 isPlainObject函数用于判断传入的对象是否为纯粹的JavaScript对象。具体实现如下: function isPlainObject(obj) { var proto, Ctor; // 剔除null和非对象类型 if (!obj || {}…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部