原生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 数组当前行添加数据方法详解

    让我来详细讲解一下”js数组当前行添加数据方法”。 什么是js数组当前行添加数据方法 在JavaScript中一个数组可以存储多个数据,通常我们在向数组中添加数据的时候,都是直接在数组末尾添加。但是有时候我们需要将数据插入到指定的位置,这时候就需要使用数组的当前行添加数据的方法。 如何在js中实现数组当前行添加数据 JavaScript数组提供了两种当前行添…

    JavaScript 2023年5月19日
    00
  • js正则表达式replace替换变量方法

    JS正则表达式replace替换变量方法是一种常见的字符串替换方式。可以利用正则表达式匹配字符串中需要替换的部分,并将其替换为新的内容。下面详细讲解这种方法的步骤和示例。 1. 替换方法的语法 JS中正则表达式replace替换变量方法的语法如下: str.replace(regexp|substr, newSubStr|function) 其中, str …

    JavaScript 2023年6月10日
    00
  • 正则表达式模式匹配的String方法

    正则表达式模式匹配是一种常见的字符串处理方式,可以通过String类中的方法进行实现。在Java中,使用正则表达式通过匹配字符串来实现字符串处理和分析,常用的方法包括matches()、split()、replaceAll()等。 在Java中,String类提供了matches()方法用于判断某个字符串是否与指定的正则表达式匹配。这个方法返回一个布尔值,如…

    JavaScript 2023年6月10日
    00
  • 浅谈TypeScript3.7中值得注意的3个新特性

    首先,让我们先简单介绍一下TypeScript。TypeScript是微软开发的一种超集编程语言,它是JavaScript的扩展,可以增加静态类型、接口、类、命名空间等特性,将JavaScript打造成强类型的脚本语言。 TypeScript3.7是最新的版本,其中有三个新特性值得我们关注。 1.声明只读数组和元组 在TypeScript 3.7中,我们可以…

    JavaScript 2023年5月27日
    00
  • javascript两种function的定义介绍及区别说明

    Javascript中声明函数有两种常见的方式,并且这两种方式是有所不同的。 声明方式一:函数声明 函数声明是最常见的一种方式,有两个部分组成:函数名和函数体。函数声明的语法如下: function functionName(parameters){ //函数体 } 其中,function为关键字,functionName为函数名称(可以自定义),param…

    JavaScript 2023年5月27日
    00
  • JavaScript利用Immerjs实现不可变数据

    针对“JavaScript利用Immerjs实现不可变数据”的完整攻略,我为大家提供以下详细讲解。 什么是Immerjs Immerjs是一个JavaScript库,可以让您使用不可变数据避免更改源数据。它通过提供一种易于使用的机制来撰写交错对象更新(Immerjs的核心)。 Immerjs通过使用JavaScript Proxy API来实现这些功能,而P…

    JavaScript 2023年6月10日
    00
  • 详解JS转换数值函数Number()、parseInt()、parseFloat()

    详解JS转换数值函数Number()、parseInt()、parseFloat() 前言 在JavaScript中,数值转换是很常见的操作。例如,用户输入的内容可能是字符串类型,而你需要将其转换成数值类型,或者你需要将数值类型转换为字符串类型,以便于存储或展示。为此,JavaScript提供了一些原生的函数用于进行数值类型之间的转换。其中,最常用的三个函数…

    JavaScript 2023年5月27日
    00
  • Easyui form combobox省市区三级联动

    Easyui form combobox省市区三级联动可以帮助用户快速选择省市区的信息,提供了良好的用户体验。下面我们来详细讲解该功能的完整攻略。 实现步骤 第一步:引入EasyUI资源文件和jQuery库文件 <link rel="stylesheet" type="text/css" href="h…

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