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

FullCalendar.js如何设置指定事件刷新后仍固定显示在日历底部

问题描述

在JavaScript项目中使用FullCalendar日历组件,需要实现标题为Cost My Event的事件在页面刷新重载后,始终固定显示在日历视图最底部的效果。
此前尝试通过eventRender、eventDidMount等配置回调实现该需求,均未得到预期结果。当前通过eventSource配置项加载事件数据,效果参考如下截图:
FullCalendar运行效果参考

现有实现代码
function renderCalender(val){

var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
  eventSources: [
    {
      events: [
        {
          title: 'My Event',
          start: '2022-05-31',
          end: '2022-05-31',
        },
        {
          title: 'My Event 1',
          start: '2022-05-31',
          end: '2022-06-02',
        }
      ],
    },
    {
      events: [
        {
          title: 'Cost My Event',
          start: '2022-05-31',
          end: '2022-05-31',
          url: 'http://google.com/'
        },
        {
          title: 'Cost My Event',
          start: '2022-06-01',
          end: '2022-06-02',
        }
      ],
      color: '#4caf50',
      textColor: '#fff',
    }
  ],
});
calendar.render();
}
实现方案

通过DOM操作修改事件顺序的方案失效,核心原因是FullCalendar在视图切换、窗口resize、事件重载、页面重渲染时会重新生成事件DOM结构,手动调整的DOM顺序会被直接覆盖。最稳定的实现方式是使用组件原生提供的事件排序配置,从渲染逻辑层面固定事件顺序:

  • 给所有需要沉底的Cost My Event事件添加自定义排序字段,设置较大的排序值;普通事件设置较小的排序值
  • 全局配置eventOrder参数,指定事件按照自定义排序字段升序排列,数值越大的事件渲染位置越靠后
  • 该配置是组件原生渲染规则,页面刷新、视图切换、事件重新加载都不会改变排序结果,不需要额外操作DOM

修改后的可运行代码如下:

function renderCalender(val){
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {
    // 全局指定事件排序规则:按eventOrder字段升序排列
    eventOrder: 'eventOrder',
    eventSources: [
      {
        events: [
          {
            title: 'My Event',
            start: '2022-05-31',
            end: '2022-05-31',
            eventOrder: 1 // 普通事件排序值小,优先渲染在上方
          },
          {
            title: 'My Event 1',
            start: '2022-05-31',
            end: '2022-06-02',
            eventOrder: 1
          }
        ],
      },
      {
        events: [
          {
            title: 'Cost My Event',
            start: '2022-05-31',
            end: '2022-05-31',
            url: 'http://google.com/',
            eventOrder: 999 // 排序值远大于普通事件,固定渲染在最底部
          },
          {
            title: 'Cost My Event',
            start: '2022-06-01',
            end: '2022-06-02',
            eventOrder: 999
          }
        ],
        color: '#4caf50',
        textColor: '#fff',
      }
    ],
  });
  calendar.render();
}

注意:如果后续新增其他需要固定排序的事件,只需要给对应事件设置对应梯度的eventOrder值即可,不需要修改其他配置。同排序值的事件会按照FullCalendar默认规则(开始时间、标题等)自动排序,不会影响整体固定层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:51:26