js css+html实现简单的日历

yizhihongxing

下面是详细讲解“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日

相关文章

  • 轻量级JS Cookie插件js-cookie的使用方法

    下面我将为大家详细讲解 “轻量级JS Cookie插件js-cookie的使用方法” ,请仔细阅读以下内容。 什么是js-cookie? js-cookie是一个轻量级的JavaScript库,用于处理浏览器中的cookie。它是一个简单易用的插件,可以方便地设置、获取、删除cookie。 js-cookie的安装与引用 安装js-cookie库: npm …

    JavaScript 2023年5月27日
    00
  • JavaScript中的索引数组、关联数组和静态数组、动态数组讲解

    JavaScript中常见的数组类型主要有四种:索引数组、关联数组、静态数组和动态数组。 索引数组 索引数组是最基本的数组类型,其下标由数字表示,从0开始依次递增。 创建索引数组可以通过以下方式: const arr = [1, 2, 3]; 访问和修改索引数组中的元素可以通过下标进行: const arr = [1, 2, 3]; arr[0]; // 返…

    JavaScript 2023年5月27日
    00
  • javascript正则表达式简介

    JavaScript正则表达式简介 JavaScript中的正则表达式是指一种用于匹配和操作字符串的表达式。它们被广泛用于文本搜索和替换操作中。在JavaScript中,使用RegExp对象来表示正则表达式。 正则表达式语法 正则表达式由字符和特殊字符组成,在此先介绍一些基本的概念: 字符表达式:由字母、数字、特殊字符等组成的一个或多个字符。 特殊字符:表达…

    JavaScript 2023年5月19日
    00
  • 通过网页查看JS源码中汉字显示乱码的解决方法

    下面我将详细讲解“通过网页查看JS源码中汉字显示乱码的解决方法”的完整攻略。 问题描述 在网页中显示的中文汉字正常,但在JS源码中却显示为乱码,这给开发者的调试和定位问题带来了一定的困扰。 解决方案 方案一:设置JS源文件编码为UTF-8 步骤: 确认JS源文件编码,可通过编辑器(如VS Code、Sublime Text)或cmd命令(如file命令)查看…

    JavaScript 2023年5月20日
    00
  • js简单实现自动生成表格功能示例

    下面我详细讲解“js简单实现自动生成表格功能”的完整攻略。 思路分析 在实现自动生成表格的功能之前,我们需要考虑以下几个问题: 在什么情况下需要自动生成表格? 在很多情况下,我们需要将一些数据展示在网页上,同时这些数据可能十分庞大,用表格的形式展示更加直观且易于阅读。 自动生成表格需要哪些数据? 自动生成表格需要一个二维数组,表示表格中的每一个单元格的内容。…

    JavaScript 2023年5月28日
    00
  • Javascript Date getSeconds() 方法

    以下是关于JavaScript Date对象的getSeconds()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getSeconds()方法 JavaScript Date对象的getSeconds()方法返回一个秒的数字(0-59)。方法可用获取当前日期的秒数。 下使用Date对象的getSeconds()方法的示例: var…

    JavaScript 2023年5月11日
    00
  • JavaScript字符串转换数字的方法

    JavaScript字符串转换数字的方法有很多种。以下是几种常见的转换方法: 使用parseInt()函数 parseInt()函数可以将一个字符串转换成整数。如果字符串包含了非数字字符,则会忽略这些字符。 let str = "123"; let num = parseInt(str); console.log(num); // 123…

    JavaScript 2023年5月28日
    00
  • Javascript使用正则验证身份证号(简单)

    首先,需要提供正则表达式来匹配身份证号码: var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; 这个正则表达式可以匹配15位、18位身份证号码和17位数字加一个字母(大小写均可),字母可以为X或x。 接下来,可以使用 test() 方法对身份证号码进行验证。示例代码如下: function checkI…

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