…">
当前位置:首页 > JavaScript

js 实现日历

2026-04-03 22:35:34JavaScript

实现基础日历结构

使用HTML和CSS创建一个简单的日历框架,通过JavaScript动态填充日期。HTML部分需要包含日历容器和标题显示区域。

<div id="calendar">
  <div class="header">
    <button id="prev">←</button>
    <h2 id="month-year"></h2>
    <button id="next">→</button>
  </div>
  <div class="days">
    <div class="day">日</div>
    <div class="day">一</div>
    <div class="day">二</div>
    <div class="day">三</div>
    <div class="day">四</div>
    <div class="day">五</div>
    <div class="day">六</div>
  </div>
  <div class="dates" id="dates"></div>
</div>

初始化日历数据

JavaScript中需要定义当前月份和年份,并创建函数来更新日历显示。使用Date对象获取月份天数及第一天是星期几。

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

function updateCalendar() {
  const monthYearElement = document.getElementById('month-year');
  monthYearElement.textContent = `${currentYear}年 ${currentMonth + 1}月`;

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

  const datesElement = document.getElementById('dates');
  datesElement.innerHTML = '';

  // 填充空白格
  for (let i = 0; i < firstDay; i++) {
    const emptyDay = document.createElement('div');
    emptyDay.classList.add('date');
    datesElement.appendChild(emptyDay);
  }

  // 填充日期
  for (let i = 1; i <= daysInMonth; i++) {
    const dateElement = document.createElement('div');
    dateElement.classList.add('date');
    dateElement.textContent = i;
    datesElement.appendChild(dateElement);
  }
}

添加月份切换功能

为前后按钮添加事件监听器,实现月份切换功能。需要注意年份的跨年处理。

js 实现日历

document.getElementById('prev').addEventListener('click', () => {
  currentMonth--;
  if (currentMonth < 0) {
    currentMonth = 11;
    currentYear--;
  }
  updateCalendar();
});

document.getElementById('next').addEventListener('click', () => {
  currentMonth++;
  if (currentMonth > 11) {
    currentMonth = 0;
    currentYear++;
  }
  updateCalendar();
});

添加样式美化日历

CSS样式可以增强日历的可视化效果,包括网格布局、颜色和悬停效果。

#calendar {
  width: 300px;
  font-family: Arial, sans-serif;
}

.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 10px;
}

.days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  text-align: center;
  font-weight: bold;
}

#dates {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
}

.date {
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.date:hover {
  background-color: #eee;
}

实现日期选择功能

添加点击事件监听器,允许用户选择特定日期并高亮显示。

js 实现日历

document.getElementById('dates').addEventListener('click', (e) => {
  if (e.target.classList.contains('date') && e.target.textContent) {
    const selectedDates = document.querySelectorAll('.selected');
    selectedDates.forEach(date => date.classList.remove('selected'));
    e.target.classList.add('selected');
  }
});

添加今天标记

在日历中突出显示当前日期,帮助用户快速定位。

function updateCalendar() {
  // ...之前代码...

  // 填充日期
  for (let i = 1; i <= daysInMonth; i++) {
    const dateElement = document.createElement('div');
    dateElement.classList.add('date');
    dateElement.textContent = i;

    // 标记今天
    if (i === currentDate.getDate() && 
        currentMonth === currentDate.getMonth() && 
        currentYear === currentDate.getFullYear()) {
      dateElement.classList.add('today');
    }

    datesElement.appendChild(dateElement);
  }
}

对应CSS添加今天样式:

.today {
  background-color: #4285f4;
  color: white;
  border-radius: 50%;
}

.selected {
  background-color: #34a853;
  color: white;
  border-radius: 50%;
}

标签: 日历js
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…