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日

相关文章

  • JS编程小常识很有用

    JS编程小常识是指在JavaScript编程中,常用到的一些小技巧和注意事项。这些小常识可以帮助开发者以更高效、安全、健壮的方式编写JavaScript代码。下面是一个完整的攻略,包括示例说明 1. 变量声明 使用const和let来声明变量,而不是使用var。 使用const对于不会被重新赋值的变量,使用let对于可能被重新赋值的变量。 不要使用全局变量,…

    JavaScript 2023年6月10日
    00
  • js实现前面自动补全位数的方法

    下面是详细讲解“js实现前面自动补全位数的方法”的完整攻略。 1. 简介 前置自动补全位数的方法就是指在数字前面添加相应数量的“0”,使得数字的位数达到指定的长度。在程序开发中,通常需要对数字进行前置自动补全位数操作,比如在电子表格中,在文件名中,签到表单中等等。 JavaScript提供了多种方法来完成这个任务,我们将介绍其中两种方法。 2. 方法一:利用…

    JavaScript 2023年5月28日
    00
  • 浅谈Vue使用Elementui修改默认的最快方法

    下面我来详细讲解如何使用Element UI修改Vue的默认主题样式。 安装 Element UI 首先需要安装Element UI,可以通过npm安装: npm install element-ui -S 引入 Element UI 在Vue项目的main.js文件中,引入Element UI的样式文件和js文件: import Vue from ‘vue…

    JavaScript 2023年6月10日
    00
  • 详细教你微信公众号正文页SVG交互开发技巧

    详细教你微信公众号正文页SVG交互开发技巧 介绍 在微信公众号开发中,SVG(Scalable Vector Graphics)是很方便的一种图形格式,可以实现图片的高清缩放以及交互式效果。本文将介绍如何利用SVG开发微信公众号正文页的交互功能。 使用技巧 1. SVG基础知识 SVG是一种使用XML描述2D图形的语言,它定义了诸如图形、文本、滤镜和动画等可…

    JavaScript 2023年6月10日
    00
  • 一文带你理解JavaScript中的函数式编程

    “一文带你理解JavaScript中的函数式编程”的完整攻略 什么是函数式编程? 函数式编程是一种编程范式,它将计算机程序看作一系列数学函数的组合,避免使用共享状态和可变数据,通过数据不可变和函数无副作用的特性实现函数的组合和复用。JavaScript原生支持函数式编程,在近年来的JavaScript开发中也越来越普遍。 函数式编程的特点 函数是一等公民:函…

    JavaScript 2023年5月27日
    00
  • 简单实现js上传文件功能

    实现js上传文件功能主要分为以下几个步骤: 1. 创建HTML文件上传表单 创建一个表单,用于接收用户上传的文件。表单中需要包含一个<input type=”file”>的输入框,用于选择文件。同时也可以添加一些其它的表单元素,如文本框和按钮等,方便用户填写一些附加信息。 <form method="post" enct…

    JavaScript 2023年5月27日
    00
  • js获取html文件的思路及示例

    获取HTML文件的思路主要分为两步:首先,需要用AJAX(Asynchronous JavaScript and XML)进行HTTP请求来获取HTML文件;然后,需要解析文件内容,将其转换为DOM(Document Object Model)对象,以便进一步操作。下面我将分步骤详细讲解。 一、用AJAX请求HTML文件 AJAX是一种用于创建异步请求的技术…

    JavaScript 2023年5月27日
    00
  • JS数组进阶示例【数组的几种函数用法】

    JS数组进阶示例【数组的几种函数用法】是一个关于JavaScript数组的进阶教程。本教程主要介绍了数组的一些常用函数用法,可以帮助读者更好地理解和运用JavaScript数组。 目录 map()函数 reduce()函数 filter()函数 示例教程1:统计颜色 示例教程2:计算平均分 map()函数 map()函数是一种用于处理数组元素的函数,它会将数…

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