纯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日

相关文章

  • angularJs中datatable实现代码

    下面给出AngularJS中datatable实现代码的完整攻略,这里使用的是AngularJS版本为1.x,实现过程中需要使用一些第三方库来支持。攻略分成以下几个步骤: 步骤一 安装必需的依赖 在开始之前,你需要在本地安装以下库: jQuery:用于操作DOM和事件处理 Bootstrap:用于样式 AngularJS:主要的MVC框架 <!– j…

    JavaScript 2023年6月11日
    00
  • JS代码放在head和body中的区别分析

    JS代码放在head和body中的区别分析 以网页为例,其中包含了HTML、CSS、JS三种内容。其中HTML体现了网页的内容结构,CSS刻画了网页的外观样式,而JS则掌管了网页的交互行为。而JS代码在页面中该如何放置呢?通常有两种位置可供选择:head标签内和body标签内。下面分别对这两种方式进行分析。 head标签内放置JS代码 head标签一般放置的…

    JavaScript 2023年6月11日
    00
  • JS实现鼠标框选效果完整实例

    下面是详细的“JS实现鼠标框选效果完整实例”的完整攻略,包含两条示例说明。 概述 鼠标框选效果是一种常见的 Web 应用程序 UI 设计。具体来说,通过 JavaScript 实现鼠标框选效果,可以让用户在多个元素中选择他们想要的元素。 实现鼠标框选效果的核心在于:鼠标按下之后从鼠标按下位置到鼠标移动位置之间的所有元素会被高亮标记,鼠标释放后,所有被标记的元…

    JavaScript 2023年5月28日
    00
  • javascript里模拟sleep(两种实现方式)

    下面是JavaScript模拟sleep的两种实现方式的详细攻略。 方式一:使用Promise对象 定义async函数: async function sleep(duration) { return new Promise(resolve => setTimeout(resolve, duration)) } 将需要延迟执行的代码放在async函数中…

    JavaScript 2023年6月11日
    00
  • 详解Javascript中DOM的范围

    详解Javascript中DOM的范围 什么是DOM范围 在Javascript中,DOM(Document Object Model)是指用来描述HTML文档结构的树形结构模型。而DOM范围则是指在Javascript中,我们可以对DOM树进行操作的范围。 一个DOM范围由以下几个组成部分: 起始边界点(start boundary point):范围的开…

    JavaScript 2023年6月10日
    00
  • js动态生成唯一id的三种方法

    那么我们就来讲解一下JS动态生成唯一ID的三种方法。 1. 使用Math.random() 使用Math.random()方法可以生成一个随机数,因为它返回0到1之间的伪随机数,所以我们可以将其与当前的时间戳相乘,生成一个不太可能重复的唯一ID。 function generateUniqueID() { let uniqueID = Math.floor(…

    JavaScript 2023年6月10日
    00
  • Three.js实现简单3D房间布局

    题目:Three.js实现简单3D房间布局攻略 简介 Three.js 是一个 3D 库,它让你使用 JavaScript 构建 WebGL 应用程序,实现在浏览器中创建、显示和操作 3D 图形。 在这篇攻略中,我们将讲解如何使用 Three.js 实现简单的 3D 房间布局。我们将会创建一个包含墙壁、门和窗户的房间,以及一些简单的家具模型,最后将所有物体放…

    JavaScript 2023年6月11日
    00
  • JavaScript实现世界各地时间显示

    当使用 JavaScript 实现世界各地时间显示时,我们可以利用 Date 对象和其方法,将获取的世界各地时区与本地时间进行计算再进行显示。 以下是实现该功能的完整攻略: 步骤一:获取本地时间 在 JavaScript 中,我们可以通过创建 Date 实例来获取当前本地时间。下面是一个获取本地时间的实例: const localTime = new Dat…

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