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

如何根据event.extendedProps.isBelong状态自定义FullCalendar事件的可调整大小与拖拽

自定义FullCalendar事件的拖拽与调整大小权限

要实现根据event.extendedProps.isBelong属性控制事件的拖拽和调整大小权限,无需手动修改DOM样式,FullCalendar提供了专门的配置项和钩子来处理这类交互控制,结合你现有的eventRender代码,可按以下方式实现:

1. 控制拖拽权限

使用eventAllow配置项,通过判断事件的isBelong属性返回布尔值,决定是否允许拖拽:

eventAllow: function(dropInfo, draggedEvent) {
  // 仅当isBelong为true时允许拖拽
  return draggedEvent.extendedProps.isBelong === true;
}

2. 控制调整大小权限

使用eventResizeAllow配置项,同样基于isBelong属性控制调整大小的权限:

eventResizeAllow: function(resizeInfo) {
  // 仅当isBelong为true时允许调整大小
  return resizeInfo.event.extendedProps.isBelong === true;
}

3. 配合eventRender优化交互元素

你当前的eventRender中手动添加了调整手柄(fc-resizer),需要根据isBelong属性决定是否渲染这些元素,避免无效的交互控件显示:

eventRender: function(info) {
  var event = info.event;
  var element = info.el;
  // 根据isBelong决定是否渲染调整手柄
  var resizerHtml = event.extendedProps.isBelong ? `
    <div class="fc-resizer fc-resizer-start"></div>
    <div class="fc-resizer fc-resizer-end"></div>
  ` : '';

  var customContent = `
    <div class="fc-content">
      <div class="custom-event-content" style="cursor: ${event.extendedProps.isBelong ? 'move' : 'initial'};padding: .6rem;">
        <small>${moment(event.start).format("HH:mm")} - ${moment(event.end).format("HH:mm")} </small><br/>
        <a style="color: ${event.textColor};text-decoration: none;" href="${event.extendedProps.urlString}"><strong> ${event.title} </strong></a><br/>
        <i class="fa-solid fa-eye pointer mt-2"></i>
      </div>
    </div>
    ${resizerHtml}
  `;

  element.innerHTML = customContent;

  var eyeIcon = element.querySelector('.fa-eye');
  if (eyeIcon) {
    eyeIcon.addEventListener('click', function() {
      openDetailModal(info);
    });
  }
},

这里还修改了cursor样式:当允许拖拽时,鼠标悬停事件显示移动光标,否则保持默认,提升用户体验。

完整配置示例

将上述配置整合到FullCalendar的初始化代码中:

document.addEventListener('DOMContentLoaded', function() {
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {
    // 其他基础配置(比如header、views等)
    eventAllow: function(dropInfo, draggedEvent) {
      return draggedEvent.extendedProps.isBelong === true;
    },
    eventResizeAllow: function(resizeInfo) {
      return resizeInfo.event.extendedProps.isBelong === true;
    },
    eventRender: function(info) {
      // 上述修改后的eventRender代码
    },
    // 其他必要配置(比如events数据源等)
  });
  calendar.render();
});

这样就能精准实现需求:仅当event.extendedProps.isBelong为true时,事件可拖拽和调整大小;属性为false时,这些交互功能完全禁用,且不会显示无效的调整手柄。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:00:07