原生js实现日历效果

原生js实现日历效果

实现日历效果,需要完成以下几个步骤:

  • 获取年月数据
  • 绘制日历框架
  • 填充日期数据
  • 绑定事件

1. 获取年月数据

通过Date()获取当前时间信息,包括年、月、日等信息。

const currentDate = new Date();
let currentYear = currentDate.getFullYear();
let currentMonth = currentDate.getMonth() + 1;

2. 绘制日历框架

通过HTML元素绘制出日历框架,包括日历头和日期框架。

const calendarWrapper = document.querySelector('.calendar-wrapper'); // 获取容器元素
const calendarHTML = `
  <div class="calendar-header">
    <span class="prev-year-btn">&lt;&lt;</span>
    <span class="prev-month-btn">&lt;</span>
    <span class="calendar-title">${currentYear}年${currentMonth}月</span>
    <span class="next-month-btn">&gt;</span>
    <span class="next-year-btn">&gt;&gt;</span>
  </div>
  <ul class="calendar-content"></ul>
`;
calendarWrapper.innerHTML = calendarHTML;  // 将html代码写入容器元素中

3. 填充日期数据

获取当前月份的第一天,以及当前月份的总天数。

const firstDay = new Date(currentYear, currentMonth - 1, 1).getDay();
const totalDays = new Date(currentYear, currentMonth, 0).getDate();

根据firstDay,在日历框架中绘制出相应数量的空白日期占位符。

let contentHTML = '';
for (let i = 0; i < firstDay; i++) {
  contentHTML += '<li class="calendar-item"></li>';
}

根据totalDays,绘制出当前月份的日期信息。

for (let i = 1; i <= totalDays; i++) {
  contentHTML += `
    <li class="calendar-item">${i}</li>
  `;
}

将绘制好的日期填充到日历框架中。

const calendarContent = calendarWrapper.querySelector('.calendar-content');
calendarContent.innerHTML = contentHTML;

4. 绑定事件

为日历头的翻页按钮绑定点击事件,通过更新currentYearcurrentMonth并重新绘制出日历框架来完成月份的翻页功能。

const prevYearBtn = calendarWrapper.querySelector('.prev-year-btn');
const prevMonthBtn = calendarWrapper.querySelector('.prev-month-btn');
const nextMonthBtn = calendarWrapper.querySelector('.next-month-btn');
const nextYearBtn = calendarWrapper.querySelector('.next-year-btn');

prevMonthBtn.addEventListener('click', () => {
  currentMonth--;
  if (currentMonth <= 0) {
    currentMonth = 12;
    currentYear--;
  }
  renderCalendar();
});

nextMonthBtn.addEventListener('click', () => {
  currentMonth++;
  if (currentMonth > 12) {
    currentMonth = 1;
    currentYear++;
  }
  renderCalendar();
});

prevYearBtn.addEventListener('click', () => {
  currentYear--;
  renderCalendar();
});

nextYearBtn.addEventListener('click', () => {
  currentYear++;
  renderCalendar();
});

完整代码示例:https://codepen.io/zjazj/pen/XVJwQj

另外,还可以通过moment.js库来优化日期时间处理:https://momentjs.com/

示例2:https://codepen.io/robin-dai/pen/LLdJJa

以上两个示例都使用了原生js实现日历效果,前者是通过HTML+CSS+JS方式实现,后者是通过js渲染日历框架和填充数据的方式实现。其中,第一个示例更注重外观和样式,第二个示例更注重代码逻辑和灵活性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现日历效果 - Python技术站

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

相关文章

  • JS中Array数组学习总结

    以下是关于“JS中Array数组学习总结”的完整攻略: JS中Array数组学习总结 概念 数组是一种有序的数据集合,是JavaScript中最重要的数据类型之一。数组可以通过索引访问、插入和删除其中的元素。 声明数组 数组的声明方式有两种,分别是字面量方式和构造函数方式。 // 字面量方式 let arr1 = [1, 2, 3, 4, 5]; // 构造…

    JavaScript 2023年5月27日
    00
  • 详解js location.href和window.open的几种用法和区别

    下面是“详解js location.href和window.open的几种用法和区别”的完整攻略。 一、前言 在前端开发中,有时候我们需要通过JS来控制浏览器的跳转或打开新窗口等操作,而其中常用的方法就是location.href和window.open。这两个方法虽然都是用来进行页面跳转或打开新窗口,但它们之间还是存在一些区别的。本文将详细讲解JS中loc…

    JavaScript 2023年6月11日
    00
  • Ajax实现搜索引擎自动补全功能

    实现搜索引擎自动补全功能的一种方式是通过Ajax技术来异步获取匹配结果,并动态更新在页面上。 以下是具体步骤: 1. 构建搜索表单 构建一个包含搜索框的表单,需要设置一个 input 元素的 id 为 search,表示搜索输入框。 <form> <input type="text" id="search&qu…

    JavaScript 2023年6月11日
    00
  • javascript实现弹出层效果

    实现弹出层效果通常使用javascript的模态框(Modal)实现。以下是步骤: 步骤一:构建HTML结构 为弹出层准备一个HTML结构,该结构包括带有唯一标识符的背景层和弹出层本身。如下所示: <div id="overlay"> <div id="popup"> <h2>这是弹…

    JavaScript 2023年6月11日
    00
  • php 解析xml 的四种方法详细介绍

    下面是关于”php解析xml的四种方法详细介绍”的攻略。 目录 背景 方法1:使用 SimpleXML 扩展 方法2:使用 DOM 方法3:使用 XMLReader 方法4:使用 SAX 总结 背景 为了在 Web 应用程序中处理 XML 数据,了解如何在 PHP 中解析 XML 是一个很好的技能。 PHP 有多种解析 XML 的方法 可供选择。在此处提供 …

    JavaScript 2023年6月10日
    00
  • Angular实现的table表格排序功能完整示例

    让我为你详细讲解“Angular实现的table表格排序功能完整示例”的完整攻略。 什么是Angular实现的table表格排序功能 在Angular中,我们可以通过使用ngFor指令循环渲染table表格中的数据,并在表格头部添加按钮进行排序,达到对表格数据排序的目的。这种方法可以在应用中节省代码量,并提高数据可读性。 如何实现Angular实现的tabl…

    JavaScript 2023年6月10日
    00
  • JS 创建对象的模式实例小结

    下面是关于“JS 创建对象的模式实例小结”的完整攻略,其中包含两个示例说明: JS 创建对象的模式实例小结 在 JavaScript 中,创建对象有多种模式,不同的模式适用于不同的场景和需求。本文将对常见的四种创建对象的模式做一个简单介绍和小结,方便读者选择合适的模式进行对象创建。 一、工厂模式 工厂模式通过工厂方法创建对象,将创建对象的过程封装在一个函数中…

    JavaScript 2023年5月27日
    00
  • 如何使用JavaScript快速创建一个1到100的数组

    下面是使用JavaScript快速创建1到100的数组的攻略: 1. 使用for循环快速创建一个1到100的数组 // 创建一个长度为 100 的数组 var arr = new Array(100); for (var i = 0; i < arr.length; i++) { // 把数组的每个元素赋值为它的下标+1 arr[i] = i + 1;…

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