纯JS实现简单的日历

yizhihongxing

接下来我将详细讲解如何使用纯JS实现简单的日历。

步骤一:搭建基本框架

在HTML文件中创建一个容器,用于显示日历,并将其与CSS文件链接起来:

<div id="calendar"></div>

<link rel="stylesheet" href="calendar.css">

然后,在JS文件中,使用以下代码来获取日历容器,并为其创建一个日期表的框架:

// 获取日历容器
const calendar = document.getElementById('calendar');

// 获取当前日期
const now = new Date();

// 创建日期表框架
const table = document.createElement('table');

// 添加表头
const thead = document.createElement('thead');
thead.innerHTML = `
  <tr>
    <th>Sun</th>
    <th>Mon</th>
    <th>Tue</th>
    <th>Wed</th>
    <th>Thu</th>
    <th>Fri</th>
    <th>Sat</th>
  </tr>
`;
table.appendChild(thead);

// 添加日期表格
const tbody = document.createElement('tbody');
table.appendChild(tbody);

// 将日期表格添加到日历容器中
calendar.appendChild(table);

步骤二:为日期表格添加日期

接下来,我们需要用JS动态地为日期表格添加日期。我们可以使用以下代码来循环添加日期:

// 获取当前月份的第一天
const firstDayOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);

// 获取当前月份的最后一天
const lastDayOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0);

// 循环添加日期
for (let date = 1; date <= lastDayOfMonth.getDate(); date++) {
  // 创建日期单元格
  const cell = document.createElement('td');
  cell.innerText = date;

  // 将日期单元格添加到日期表格中
  tbody.appendChild(cell);

  // 如果是当前日期,为日期单元格添加特殊样式
  if (date === now.getDate()) {
    cell.classList.add('today');
  }

  // 如果是星期六,为日期单元格添加样式
  if (new Date(now.getFullYear(), now.getMonth(), date).getDay() === 6) {
    cell.classList.add('saturday');
  }

  // 如果是星期日,为日期单元格添加样式
  if (new Date(now.getFullYear(), now.getMonth(), date).getDay() === 0) {
    cell.classList.add('sunday');
  }
}

这段代码将在日期表格中循环添加当前月份的所有日期,并为其中的特殊日期添加不同的样式。

步骤三:为日期表格添加事件监听

最后,我们可以为日期表格添加事件监听,以便当用户点击某个日期时,我们能够获取到这个日期,并执行特定的操作。以下是一个示例:

// 为日期表格添加事件监听
tbody.addEventListener('click', event => {
  const target = event.target;

  // 如果用户点击的是日期单元格
  if (target.tagName.toLowerCase() === 'td') {
    const date = new Date(now.getFullYear(), now.getMonth(), parseInt(target.innerText));
    alert(date.toLocaleDateString());
  }
});

这段代码将在日期表格上监听click事件。当用户点击日期单元格时,它会获取被点击单元格的日期,然后以弹窗的形式显示该日期。

示例说明

示例一

假设当前时间是2022年7月,我们可以使用以下代码来创建并显示一个7月份的日历:

// 获取日历容器
const calendar = document.getElementById('calendar');

// 获取当前日期
const now = new Date(2022, 6, 1);

// 创建日期表框架
const table = document.createElement('table');

// 添加表头
const thead = document.createElement('thead');
thead.innerHTML = `
  <tr>
    <th>Sun</th>
    <th>Mon</th>
    <th>Tue</th>
    <th>Wed</th>
    <th>Thu</th>
    <th>Fri</th>
    <th>Sat</th>
  </tr>
`;
table.appendChild(thead);

// 添加日期表格
const tbody = document.createElement('tbody');
table.appendChild(tbody);

// 循环添加日期
const firstDayOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
const lastDayOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0);
for (let date = 1; date <= lastDayOfMonth.getDate(); date++) {
  const cell = document.createElement('td');
  cell.innerText = date;
  tbody.appendChild(cell);

  if (date === now.getDate()) {
    cell.classList.add('today');
  }

  if (new Date(now.getFullYear(), now.getMonth(), date).getDay() === 6) {
    cell.classList.add('saturday');
  }

  if (new Date(now.getFullYear(), now.getMonth(), date).getDay() === 0) {
    cell.classList.add('sunday');
  }
}

// 将日期表格添加到日历容器中
calendar.appendChild(table);

这段代码将创建并显示一个2022年7月份的日历。

示例二

接下来,我们可以为日期表格添加时间监听,以便当用户点击某个日期时,我们能够获取到这个日期,并执行特定的操作。以下是一个示例:

// 为日期表格添加事件监听
tbody.addEventListener('click', event => {
  const target = event.target;

  // 如果用户点击的是日期单元格
  if (target.tagName.toLowerCase() === 'td') {
    const date = new Date(now.getFullYear(), now.getMonth(), parseInt(target.innerText));
    alert(date.toLocaleDateString());
  }
});

这段代码将在日期表格上监听click事件。当用户点击日期单元格时,它会获取被点击单元格的日期,然后以弹窗的形式显示该日期。

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

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

相关文章

  • 浅谈Javascript数组索引

    浅谈Javascript数组索引 数组是Javascript中的一种非常常见的数据类型,数组索引是访问数组中的元素的主要方式。在本文中,我们将讨论Javascript数组索引相关的概念,方法以及常见问题。 数组索引的概念 在Javascript中,数组索引是一个数字,用于在数组中标识元素位置。数组的第一个元素的索引值为0,其余元素的索引值是以0递增的。 例如…

    JavaScript 2023年5月27日
    00
  • javascript 建设银行登陆键盘

    JavaScript 建设银行登录键盘是一个非常常见的前端实现方法,在一些特殊场景下可以有效地保护用户的登录信息泄露。下面是一份完整的攻略。 步骤一:HTML 结构 首先,我们需要创建一个基本的 HTML 结构来呈现登录页面和键盘。以下是基本的 HTML 结构: <form id="loginForm"> <div&gt…

    JavaScript 2023年6月11日
    00
  • JavaScript 中的无穷数(Infinity)详解

    那么首先需要明确的是,在 JavaScript 中,Infinity 是指表示正无穷大的数字常量。它比任何数都大,包括自身。同时,JavaScript 也提供了一个负无穷大的常量,即-Infinity。下面,我将会详细讲解 Infinity 在 JavaScript 中的应用及示例。 什么是 Infinity? Infinity 是一个 JavaScript…

    JavaScript 2023年5月27日
    00
  • JavaScript中的16进制字符(改进)

    JavaScript中的16进制字符(改进) 在JavaScript中,我们可以使用16进制字符来表示字符或者数字。而由于16进制字符的特殊性,有时会导致一些诡异的问题,本文将为大家介绍如何使用JavaScript中的16进制字符。 1. 什么是16进制字符 在JavaScript中,16进制字符是以\x开头,后跟两个16进制数字所代表的字符。例如,’\x4…

    JavaScript 2023年5月19日
    00
  • input file上传 图片预览功能实例代码

    下面是详细讲解“input file上传图片预览功能实例代码”的完整攻略。 输入文件上传图片预览功能实例代码 简介 在web开发中,上传图片是一个很常用的功能。而预览上传图片则是一个更加友好的交互体验。在本文中,我们将演示如何使用HTML、CSS、JavaScript实现一个上传图片并预览的功能。 HTML部分 首先,我们需要在HTML中添加一个文件选择框和…

    JavaScript 2023年6月11日
    00
  • ThinkPHP表单数据智能写入create方法实例分析

    我来详细讲解一下“ThinkPHP表单数据智能写入create方法实例分析”的完整攻略。 什么是ThinkPHP表单数据智能写入create方法? 在ThinkPHP框架中,使用create方法可以将表单数据智能写入到数据库中。这个方法可以将表单中的数据自动映射到对应的模型属性中,并且会过滤掉一些非法的字段,确保插入的数据安全可靠。 怎样使用create方法…

    JavaScript 2023年6月11日
    00
  • vue路由实现登录拦截

    vue路由实现登录拦截是常见的前端开发技巧之一,有利于确保用户访问权限的安全性。下面我将为大家介绍如何利用vue路由实现登录拦截。具体步骤如下: 1. 使用vue-router实现路由拦截 在Vue Router中,可以通过导航钩子函数实现路由拦截,拦截器可以在跳转之前或之后执行一些操作,例如更改路由,验证用户权限等。 前置守卫(beforeEach) 在跳…

    JavaScript 2023年6月11日
    00
  • JavaScript中的原始值和复杂值

    JavaScript中的原始值和复杂值 在JavaScript中,数据类型可以分为两种:原始值和复杂值。 原始值 原始值是最基本的数据类型,它们是不可变的。JavaScript中有5种原始值: 字符串(String):用双引号(”)或单引号(’)包含的字符序列,例如:”Hello World”或’My Name is Peter’。 数字(Number):整…

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