当前位置:首页 > HTML

js h5实现动态日历

2026-03-06 11:10:06HTML

实现动态日历的基本思路

动态日历的核心是通过JavaScript动态生成日历表格,根据当前年月计算日期分布,并支持月份切换功能。HTML5提供更清晰的语义化结构,结合CSS实现样式美化。

HTML结构

创建一个基础的HTML结构,包含日历容器、月份导航和日期表格:

<div class="calendar">
  <div class="header">
    <button id="prev">上一月</button>
    <h2 id="month-year"></h2>
    <button id="next">下一月</button>
  </div>
  <table>
    <thead>
      <tr>
        <th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th>
      </tr>
    </thead>
    <tbody id="days"></tbody>
  </table>
</div>

CSS样式

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

.calendar {
  width: 350px;
  border: 1px solid #ddd;
  font-family: Arial;
}
.header {
  display: flex;
  justify-content: space-between;
  padding: 10px;
  background: #f5f5f5;
}
table {
  width: 100%;
  border-collapse: collapse;
}
th, td {
  padding: 10px;
  text-align: center;
  border: 1px solid #eee;
}
th {
  background: #f0f0f0;
}
td.today {
  background: #ffff99;
}

JavaScript实现

核心逻辑包括日期计算和动态渲染:

document.addEventListener('DOMContentLoaded', function() {
  let currentDate = new Date();
  const monthYearElement = document.getElementById('month-year');
  const daysElement = document.getElementById('days');
  const prevBtn = document.getElementById('prev');
  const nextBtn = document.getElementById('next');

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

    monthYearElement.textContent = `${year}年 ${month + 1}月`;

    const firstDay = new Date(year, month, 1).getDay();
    const daysInMonth = new Date(year, month + 1, 0).getDate();
    const today = new Date();

    let date = 1;
    let html = '';

    for (let i = 0; i < 6; i++) {
      html += '<tr>';

      for (let j = 0; j < 7; j++) {
        if (i === 0 && j < firstDay) {
          html += '<td></td>';
        } else if (date > daysInMonth) {
          html += '<td></td>';
        } else {
          const isToday = date === today.getDate() && 
                         month === today.getMonth() && 
                         year === today.getFullYear();
          html += `<td${isToday ? ' class="today"' : ''}>${date}</td>`;
          date++;
        }
      }

      html += '</tr>';
      if (date > daysInMonth) break;
    }

    daysElement.innerHTML = html;
  }

  prevBtn.addEventListener('click', () => {
    currentDate.setMonth(currentDate.getMonth() - 1);
    renderCalendar();
  });

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

  renderCalendar();
});

功能扩展点

  1. 日期点击事件:为每个日期单元格添加点击事件处理

    daysElement.addEventListener('click', (e) => {
    if (e.target.tagName === 'TD' && e.target.textContent) {
     console.log(`选中日期: ${currentDate.getFullYear()}-${currentDate.getMonth()+1}-${e.target.textContent}`);
    }
    });
  2. 国际化支持:使用Intl.DateTimeFormat处理多语言月份显示

    monthYearElement.textContent = new Intl.DateTimeFormat('zh-CN', {
    year: 'numeric',
    month: 'long'
    }).format(currentDate);
  3. 节日标记:通过日期匹配添加特殊样式

    
    const holidays = {
    '1-1': '元旦',
    '5-1': '劳动节'
    };

// 在渲染循环中添加判断 if (holidays[${month+1}-${date}]) { html += <td class="holiday">${date}<br>${holidays[${month+1}-${date}]}</td>; }

js h5实现动态日历


### 响应式设计建议

通过媒体查询适配移动设备:
```css
@media (max-width: 500px) {
  .calendar {
    width: 100%;
  }
  th, td {
    padding: 5px;
  }
}

完整实现需要考虑边界情况(如跨年月份切换)、性能优化(避免频繁DOM操作)和可访问性(ARIA标签)等因素。

标签: 日历动态
分享给朋友:

相关文章

vue页面实现日历

vue页面实现日历

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构,通常需要包含星期标题和日期格子。月份切换按钮可以通过v-on绑定事件。 <template> <div cla…

vue实现数据动态

vue实现数据动态

Vue 实现数据动态绑定的方法 Vue.js 的核心特性之一是数据绑定,通过响应式系统实现数据的动态更新。以下是几种常见的实现方式: 双向数据绑定(v-model) 使用 v-model 指令可以实…

vue实现动态筛选

vue实现动态筛选

Vue实现动态筛选的方法 动态筛选是Vue应用中常见的功能需求,可以通过多种方式实现。以下是几种常用的实现方法: 使用计算属性实现筛选 计算属性是Vue中实现动态筛选的理想选择,它会根据依赖的数据自…

vue 实现动态菜单

vue 实现动态菜单

动态菜单的实现思路 在Vue中实现动态菜单通常涉及从后端API获取菜单数据,根据用户权限或角色动态渲染菜单项。核心思路是将菜单数据与组件分离,通过数据驱动视图。 数据准备与API交互 创建菜单数据模…

vue 日历组件实现

vue 日历组件实现

Vue 日历组件实现 基本结构搭建 使用Vue的单文件组件(SFC)结构,创建一个基础的日历组件框架。需要定义月份、年份的状态管理,以及日期渲染逻辑。 <template> <…

vue实现动态路由

vue实现动态路由

动态路由的实现方式 Vue中实现动态路由通常涉及前端和后端的协作,以下是几种常见的实现方式: 基于用户权限的路由控制 在用户登录后,根据其权限动态生成路由表。使用router.addRoutes方…