You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FullCalendar V6 timeGridWeek视图行列互换实现方案咨询

实现FullCalendar V6 工作日为行、时间为列的自定义视图

FullCalendar V6没有直接原生配置实现行列反转的timeGrid视图,但可以通过Resource TimeGrid视图快速模拟需求,只需要少量配置,完全用纯JavaScript就能实现:

核心思路

把工作日(周一至周五)当作"资源",利用resourceTimeGridWeek视图的"资源行+时间列"布局,刚好匹配你要的效果。

具体实现步骤

1. 定义工作日资源

先创建一个资源数组,每个资源对应一个工作日,用日期字符串作为resourceId,方便后续匹配事件:

const workdayResources = [
  { id: '2024-05-20', title: '周一' },
  { id: '2024-05-21', title: '周二' },
  { id: '2024-05-22', title: '周三' },
  { id: '2024-05-23', title: '周四' },
  { id: '2024-05-24', title: '周五' }
];

如果需要动态生成每周的工作日,可以用原生Date对象自动计算当前周的周一到周五。

2. 配置日历初始化参数

初始化日历的时候,启用资源插件,设置视图为resourceTimeGridWeek,并调整布局细节:

document.addEventListener('DOMContentLoaded', function() {
  const calendarEl = document.getElementById('calendar');
  const calendar = new FullCalendar.Calendar(calendarEl, {
    plugins: ['resourceTimeGrid', 'interaction'],
    initialView: 'resourceTimeGridWeek',
    resources: workdayResources,
    // 调整时间列的显示格式
    slotLabelFormat: {
      hour: '2-digit',
      minute: '2-digit',
      meridiem: false,
      hour12: false
    },
    slotDuration: '00:30:00', // 时间槽间隔30分钟
    // 隐藏资源侧边栏,让工作日标题直接显示在每行顶部
    resourceAreaWidth: '0',
    // 映射原有事件到对应工作日资源
    events: function(info, successCallback) {
      // 替换为你的原有事件数组
      const originalEvents = [/* 你的事件数据 */];
      const mappedEvents = originalEvents.map(event => {
        const eventDate = event.start.toISOString().split('T')[0];
        return {
          ...event,
          resourceId: eventDate // 绑定到对应日期的资源
        };
      });
      successCallback(mappedEvents);
    }
  });
  calendar.render();
});

3. 动态生成每周工作日(可选)

如果需要自动适配当前周的工作日,不用手动写资源数组,可以添加一个生成函数:

function generateWeeklyWorkdayResources() {
  const resources = [];
  const now = new Date();
  // 获取当前周的周一
  const monday = new Date(now.setDate(now.getDate() - now.getDay() + 1));
  // 生成周一到周五的资源
  for (let i = 0; i < 5; i++) {
    const date = new Date(monday);
    date.setDate(monday.getDate() + i);
    const dateStr = date.toISOString().split('T')[0];
    const dayName = ['周一','周二','周三','周四','周五'][i];
    resources.push({ id: dateStr, title: dayName });
  }
  return resources;
}
// 初始化时替换为:
resources: generateWeeklyWorkdayResources(),

替代方案:自定义视图类(代码量稍多)

如果不想用资源视图,可以自定义一个继承自TimeGrid的视图类,重写布局逻辑,但需要修改日历的渲染结构,代码量比资源视图多。这种方式适合需要完全自定义布局的场景,但资源视图已经能满足大部分需求,更推荐前者。

内容的提问来源于stack exchange,提问作者N3K0100183

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:42:33