当前位置:首页 > JavaScript

日历js实现

2026-04-06 15:12:46JavaScript

日历功能在前端开发中较为常见,通常用于日期选择、事件展示等场景。以下是基于JavaScript实现日历的核心方法和代码示例:

基础日历结构

HTML部分需包含日历容器和导航控件:

<div class="calendar">
  <div class="header">
    <button id="prev">←</button>
    <h2 id="month-year"></h2>
    <button id="next">→</button>
  </div>
  <div class="days">
    <div class="day">Sun</div>
    <div class="day">Mon</div>
    <!-- 省略其他星期 -->
  </div>
  <div id="dates" class="dates"></div>
</div>

核心逻辑实现

JavaScript部分主要处理日期渲染和导航:

日历js实现

const monthYear = document.getElementById('month-year');
const datesContainer = document.getElementById('dates');
let currentDate = new Date();

function renderCalendar() {
  const year = currentDate.getFullYear();
  const month = currentDate.getMonth();

  // 获取当月第一天和最后一天
  const firstDay = new Date(year, month, 1);
  const lastDay = new Date(year, month + 1, 0);

  // 更新标题
  monthYear.textContent = `${firstDay.toLocaleString('default', { month: 'long' })} ${year}`;

  // 清空日期容器
  datesContainer.innerHTML = '';

  // 生成日期格子
  for (let i = 0; i < firstDay.getDay(); i++) {
    const emptyDiv = document.createElement('div');
    datesContainer.appendChild(emptyDiv);
  }

  for (let i = 1; i <= lastDay.getDate(); i++) {
    const dateDiv = document.createElement('div');
    dateDiv.textContent = i;
    datesContainer.appendChild(dateDiv);
  }
}

// 添加导航事件
document.getElementById('prev').addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() - 1);
  renderCalendar();
});

document.getElementById('next').addEventListener('click', () => {
  currentDate.setMonth(currentDate.getMonth() + 1);
  renderCalendar();
});

// 初始化日历
renderCalendar();

样式优化

基础CSS样式可增强可视化效果:

.calendar {
  width: 300px;
  border: 1px solid #ddd;
  font-family: Arial;
}

.header {
  display: flex;
  justify-content: space-between;
  padding: 10px;
  background: #f5f5f5;
}

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

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

高级功能扩展

  1. 日期选择功能

    日历js实现

    datesContainer.addEventListener('click', (e) => {
    if (e.target.textContent && !isNaN(e.target.textContent)) {
     document.querySelectorAll('.dates div').forEach(el => {
       el.classList.remove('selected');
     });
     e.target.classList.add('selected');
    }
    });
  2. 事件标记 可通过添加数据属性实现特殊日期标记:

    // 在renderCalendar循环中添加
    if (isEventDate(year, month, i)) {
    dateDiv.classList.add('has-event');
    }
  3. 国际化支持 使用Intl API实现多语言:

    monthYear.textContent = new Intl.DateTimeFormat('en-US', {
    month: 'long',
    year: 'numeric'
    }).format(currentDate);

以上代码构建了一个可交互的基础日历组件,可根据实际需求进一步扩展功能如周视图切换、范围选择等。对于更复杂的需求,建议考虑使用现成的库如FullCalendar、Flatpickr等。

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

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…