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

FullCalendar 6技术问题:连续事件未完全占满日期列宽度

FullCalendar 6 连续事件无法占满日期列宽度问题

问题详情

问题示意图
仅当事件的起止日期与时段时长不匹配时(如示例中的Team2周度事件),会出现事件宽度偏移、无法占满列宽的问题。

相关JS代码

document.addEventListener("DOMContentLoaded", function() {
  var date = new Date();
  var d = date.getDate();
  var m = date.getMonth();
  var y = date.getFullYear();

  var calendarEl = document.getElementById("calendar");
  var calendar = new FullCalendar.Calendar(calendarEl, { 
    nowIndicator: true,
    eventOverlap:false,
    headerToolbar: {
      left: "prev,next today",
      center: "title",
      right: "dayGridMonth,timeGridWeek,timeGridDay,listMonth"
    },
    initialDate: new Date(y, m, 2),
    initialView: "timeGridWeek",
    events: [
      {
        title: "Daily Team 1",
        start: new Date(y, m, 2, 7, 00),
        end: new Date(y, m, 2, 7, 20),
        allDay: false
      },
      {
        title: "Weekly Team 2",
        start: new Date(y, m, 2, 7, 20),
        end: new Date(y, m, 2, 8, 20),
        allDay: false
      },
      {
        title: "Sprint review Team 3",
        start: new Date(y, m, 2, 8, 20),
        end: new Date(y, m, 2, 9, 40),
        allDay: false
      },
      {
        title: "Daily Team 2",
        start: new Date(y, m, 3, 7, 00),
        end: new Date(y, m, 3, 7, 30),
        allDay: false
      },
      {
        title: "Daily Team 3",
        start: new Date(y, m, 3, 7, 30),
        end: new Date(y, m, 3, 8, 0),
        allDay: false
      },
      {
        title: "Weekly Team 1",
        start: new Date(y, m, 3, 8, 0),
        end: new Date(y, m, 3, 9, 30),
        allDay: false
      },
    ]
  });

  calendar.render();
});

解决办法

问题根源在于FullCalendar默认的时间槽间隔为30分钟,当事件的时长或起止时间无法匹配该间隔时,网格布局的宽度计算会出现偏差。提供两种可行方案:

方案1:调整事件时间对齐默认槽间隔

将所有事件的起止时间修改为30分钟的整数倍,确保时长是30分钟的倍数。比如把Daily Team 1的结束时间改为7:30,Weekly Team 2的开始时间改为7:30、结束时间改为8:30,以此类推。

方案2:修改日历时间槽间隔适配事件时长

在日历配置中添加slotDuration参数,将时间槽间隔设置为能整除所有事件时长的数值(比如20分钟),这样所有事件都会完美适配网格宽度:

var calendar = new FullCalendar.Calendar(calendarEl, { 
  nowIndicator: true,
  eventOverlap:false,
  slotDuration: '00:20:00', // 新增配置,设置20分钟为一个时间槽
  headerToolbar: {
    left: "prev,next today",
    center: "title",
    right: "dayGridMonth,timeGridWeek,timeGridDay,listMonth"
  },
  // 其余配置保持不变
});

内容的提问来源于stack exchange,提问作者K.cyrine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:35:26