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

FullCalendar3.10.0 eventOrder仅对同时长事件生效 如何实现全事件自定义排序

FullCalendar v3 让自定义排序规则对所有事件(含跨天事件)生效的解决方案

问题根因

FullCalendar v3.x 版本的默认事件排序逻辑优先级如下,eventOrder 仅会在所有前置规则判定为相等的场景下才会触发,这就是同时长单日事件排序生效、跨天不同时长事件不生效的核心原因:

  • 第一优先级:事件开始时间(越早越靠前)
  • 第二优先级:是否为全天事件(全天事件优先级高于非全天)
  • 第三优先级:事件持续时长(时长越长优先级越高)
  • 第四优先级:自定义eventOrder规则

解决方案

使用 v3 原生支持的 eventSorter 配置项替换默认排序逻辑,该回调会作用于所有事件,不受时长、跨天属性限制,适配你将排序权重存在CSS类的场景,代码修改如下:

pOptions.eventSorter = function(a, b) {
  // 优先按自定义权重排序,权重取className第一个元素的数值,加兜底避免空值报错
  const weightA = parseInt(a.className[0] || 0, 10);
  const weightB = parseInt(b.className[0] || 0, 10);
  if (weightA !== weightB) {
    return weightA - weightB;
  }
  // 自定义权重相同时可保留默认的时间排序逻辑,不需要的话直接删除这段返回0即可
  if (a.start.isBefore(b.start)) return -1;
  if (a.start.isAfter(b.start)) return 1;
  const durationA = a.end ? a.end.diff(a.start) : 0;
  const durationB = b.end ? b.end.diff(b.start) : 0;
  return durationB - durationA;
};

注意事项

  • 替换配置后可以删除原来的eventOrder代码,eventSorter优先级高于eventOrder
  • 代码中添加了className为空的兜底逻辑,避免特殊场景下解析报错

问题场景参考

日历截图明确展示了问题:跨度为2天的事件未按规则排序,单日事件可触发函数调用,排序逻辑生效(已通过断点调试确认)。
排序异常的日历界面


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:09:01