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

vue 实现动态组件

vue 实现动态组件

Vue 动态组件的实现方法 在 Vue 中,可以通过 <component> 标签结合 is 属性实现动态组件切换。以下是具体实现方式: 使用 is 属性绑定组件名 <templ…

vue动态实现表

vue动态实现表

Vue 动态实现表格的方法 使用 v-for 动态渲染表格 通过 Vue 的 v-for 指令可以动态渲染表格行和列。定义一个数组作为数据源,在模板中使用 v-for 遍历数组生成表格内容。 <…

vue实现动态筛选

vue实现动态筛选

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

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm i…

vue实现动态报表

vue实现动态报表

Vue 实现动态报表的方法 数据绑定与动态渲染 使用 Vue 的响应式数据特性,通过 v-for 动态渲染表格或图表。数据通常从 API 获取,存储在组件的 data 或 Vuex 状态中。例如:…