当前位置:首页 > 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验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js 实现链表

js 实现链表

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

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…