纯JS实现简单的日历

接下来我将详细讲解如何使用纯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去掉字符串中的双引号时,可以使用正则表达式来实现。下面是具体的步骤: 1. 使用正则表达式替换方式 JavaScript的字符串replaceAll()方法可以接收两个参数,第一个参数表示需要替换的字符串,第二个参数则表示用来替换的字符串。我们可以将第二个参数设置为空字符串,就可以实现去掉双引号的效果。 下面是一个示例: c…

    JavaScript 2023年6月10日
    00
  • 理解Javascript_07_理解instanceof实现原理

    理解Javascript_07_理解instanceof实现原理 在Javascript中,我们可以使用instanceof操作符来判断一个对象是否属于某个类或者构造函数的实例。这是一个非常常见的操作,经常用于判断一个对象的类型。在本篇攻略中,我们将深入探讨instanceof的实现原理,以及如何使用它来判断一个对象的类型。 instanceof的作用 in…

    JavaScript 2023年5月28日
    00
  • JavaScript的引用数据类型你了解多少

    引用数据类型是 JavaScript 中的一种数据类型,通常用于存储复杂的数据对象,比如数组、对象等。与之相对的是基本数据类型,如数字、字符串等。本篇攻略将详细讲解 JavaScript 的引用数据类型,包括什么是引用数据类型、与基本数据类型的区别、引用类型的常见用途。 什么是引用数据类型? 引用数据类型是一种数据类型,可以存储对象、数组和函数等复杂数据类型…

    JavaScript 2023年6月10日
    00
  • JavaScript引用类型Array实例分析

    JavaScript中,数组(Array)是一种引用类型(Reference Type),由一组有序的、可重复的元素组成,可以存在基本数据类型或其他引用类型的元素。以下是关于“JavaScript引用类型Array实例分析”的完整攻略。 一、创建数组 创建数组的方式有多种,以下是常见的几种方式: 1. 使用数组字面量(Array Literal) 数组字面量…

    JavaScript 2023年5月27日
    00
  • 原生JS:Date对象全面解析

    原生JS:Date对象全面解析 什么是Date对象 Date 对象是 JavaScript 中的内置对象,用于处理日期和时间。可以使用 new 关键字实例化一个 Date 对象。 var now = new Date(); 上述代码会返回一个 Date 对象,表示当前的日期和时间。 Date对象的方法和属性 获取年份,月份和日期 Date 对象提供了获取其表…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript编程中的原型概念

    深入理解JavaScript编程中的原型概念 JavaScript 中的原型是 JavaScript 编程中的核心概念,对于理解 JavaScript 中的对象和继承非常重要。 原型总览 在 JavaScript 中,每个对象都有一个原型。当你访问一个实例属性时,JavaScript 首先查找实例对象是否具有该属性,如果没有,则沿着原型链向上查找该属性。原型…

    JavaScript 2023年6月10日
    00
  • Qiankun Sentry 监控异常上报无法自动区分项目解决

    完整攻略如下: Qiankun Sentry 监控异常上报无法自动区分项目解决 问题描述 在使用 Qiankun 进行微前端架构开发时,可能会出现 Sentry 监控异常上报无法自动区分项目的问题。具体表现为:在一个微应用抛出异常,异常信息被上报到了主应用的 Sentry 中,而无法定位到哪个微应用抛出了异常。 原因分析 这个问题的根本原因是 Sentry …

    JavaScript 2023年5月28日
    00
  • js判断对象是否是某一类型

    判断JavaScript对象是否是某一类型有多种方法,下面介绍几种主要的方法。 1. 使用typeof运算符 typeof 运算符可以判断值的类型,对基本类型具有很好的支持。不过对于一些引用类型,typeof 返回的结果并不准确。 const num = 1; console.log(typeof num); // "number" co…

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