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

FullCalendar scheduler:eventDragStop仅同时间拖拽触发的实现咨询

FullCalendar Scheduler 拖拽事件仅在同时间执行操作的解决方案

要实现eventDragStop仅在事件被拖拽到同一日期时间时执行逻辑,核心是对比拖拽前后的事件时间状态。由于eventDragStop回调中的event对象已是拖拽后的更新状态,需要提前在拖拽开始时保存原始时间数据,再在结束时做对比判断。

实现步骤

  1. 声明全局变量存储事件的原始时间信息
  2. 在eventDragStart回调中保存拖拽前的事件开始/结束时间
  3. 在eventDragStop回调中对比原始时间与拖拽后的时间,确认未变化后再执行目标逻辑

代码示例

// 全局变量存储原始事件时间数据
let originalEventInfo = {};

// 拖拽开始时保存原始时间戳
eventDragStart: function(event, jsEvent, ui, view) {
  // 用时间戳存储,避免时区或对象引用导致的对比误差
  originalEventInfo.startTimestamp = event.start.valueOf();
  originalEventInfo.endTimestamp = event.end ? event.end.valueOf() : null;
},

eventDragStop: function(event, jsEvent, ui, view) {
  // 获取拖拽后的时间戳
  const newStartTimestamp = event.start.valueOf();
  const newEndTimestamp = event.end ? event.end.valueOf() : null;

  // 对比原始与新的时间戳,判断是否为同一时间
  const isSameDateTime = 
    originalEventInfo.startTimestamp === newStartTimestamp &&
    originalEventInfo.endTimestamp === newEndTimestamp;

  if (isSameDateTime) {
    // 仅当时间未变化时执行你的业务逻辑
    console.log("事件未改变时间,执行操作");
    // 这里写入需要执行的代码...
  } else {
    // 时间已变化,不执行任何操作
    return;
  }
}

补充说明

  • 如果需要更精细的时间对比(比如忽略秒数,只精确到分钟),可以利用FullCalendar内置的Moment.js工具:
    在eventDragStart中存储原始Moment对象:
    eventDragStart: function(event, jsEvent, ui, view) {
      originalEventInfo.start = event.start.clone();
      originalEventInfo.end = event.end ? event.end.clone() : null;
    }
    
    然后在eventDragStop中做精度对比:
    const isSameStart = originalEventInfo.start.isSame(event.start, 'minute');
    const isSameEnd = !originalEventInfo.end && !event.end || (originalEventInfo.end && originalEventInfo.end.isSame(event.end, 'minute'));
    
    if (isSameStart && isSameEnd) {
      // 执行目标逻辑
    }
    
  • 若涉及时区切换,建议统一转成UTC时间戳再对比,避免时区差异导致的判断错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:58:25