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

FullCalendar DayGridMonth视图:单日事件无法按时间渲染样式问题

解决FullCalendar DayGridMonth视图单日事件水平渲染问题

针对你遇到的单日事件无法按时间水平渲染的问题,核心原因是单日事件的.fc-daygrid-event-harness默认是position: static定位,导致你设置的left和right样式不生效。以下是修正后的代码:

eventDidMount: function(arg) {
  const event = arg.event;
  const eventElement = arg.el;
  const dayCell = eventElement.closest('.fc-daygrid-day');
  const dayCellWidth = dayCell.offsetWidth || 1;
  const eventBlockCell = eventElement.closest('.fc-daygrid-event-harness');

  // 给单日事件的harness设置绝对定位,确保left/right生效
  eventBlockCell.style.position = 'absolute';
  // 重置默认的margin和padding,避免布局偏移
  eventBlockCell.style.margin = '0';
  eventElement.style.width = 'auto';

  // 修正rightValue的判断:单日事件没有style.right,parseInt后是NaN
  let rightValue = parseInt(eventBlockCell.style.right, 10);
  if (isNaN(rightValue)) {
    rightValue = -dayCellWidth;
  }

  // 计算事件开始时间相对于当天0点的偏移比例
  const eventStartMoment = moment(event.start);
  const durationFromStart = eventStartMoment.diff(moment(event.start).startOf('day'), 'minutes');
  const leftPxAmount = (durationFromStart / (24 * 60)) * dayCellWidth;
  eventBlockCell.style.left = `${leftPxAmount}px`;

  // 计算事件结束时间相对于当天24点的偏移比例
  const eventEndMoment = moment(event.end || event.start);
  const durationFromEnd = eventEndMoment.diff(moment(eventEndMoment).endOf('day'), 'minutes');
  const rightPxAmount = Math.abs(durationFromEnd / (24 * 60)) * dayCellWidth + rightValue;
  eventBlockCell.style.right = `${rightPxAmount}px`;
}

关键修改点:

  • 强制给eventBlockCell设置position: absolute,解决单日事件定位不生效的问题
  • 修正rightValue的判断逻辑,用isNaN替代原有的===0,因为单日事件的style.right不存在,parseInt结果为NaN
  • 重置事件元素的宽度和harness的margin,避免默认样式干扰自定义布局

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:23:12