Fullcalendar 完整日历,在eventMouseover/eventMouseout上修改日历
Fullcalendar 完整日历,在eventMouseover/eventMouseout上修改日历,fullcalendar,Fullcalendar,当鼠标悬停在日历事件上时,我需要渲染背景事件。每个日历事件都有一个与之关联的日期时间范围,当用户将鼠标悬停在该范围上时,我希望在日历上显示该范围(随后在eventMouseout上从日历中删除背景事件)。但是,我遇到了一个问题,当尝试在鼠标输入/离开时修改fullCalendar时,eventMouseover和eventMouseout事件被多次触发。我想这与在日历中添加/删除任何事件时重新呈现日历有关 // I'm only here because StackOverflow requir
当鼠标悬停在日历事件上时,我需要渲染背景事件。每个日历事件都有一个与之关联的日期时间范围,当用户将鼠标悬停在该范围上时,我希望在日历上显示该范围(随后在eventMouseout上从日历中删除背景事件)。但是,我遇到了一个问题,当尝试在鼠标输入/离开时修改fullCalendar时,eventMouseover和eventMouseout事件被多次触发。我想这与在日历中添加/删除任何事件时重新呈现日历有关
// I'm only here because StackOverflow requires code to be present when a codepen link is shared.
var bgEvent = {
id: -1,
start: null,
end: null,
rendering: 'background',
backgroundColor: 'orange'
};
如果您查看,请打开DevTools并在将鼠标移到/移出任何日历事件时观察控制台。如果在一个事件中来回移动鼠标,您将看到over/out事件背靠背、一次又一次地触发
我希望发生的是一个backgroundEvent(如下所示),在任何给定事件上用datetime范围进行更新。然后在mouseout上,从日历中删除backgroundEvent
// I'm only here because StackOverflow requires code to be present when a codepen link is shared.
var bgEvent = {
id: -1,
start: null,
end: null,
rendering: 'background',
backgroundColor: 'orange'
};
相反,所发生的是eventMouseover激发、渲染事件,然后是eventMouseout,它会立即删除事件
编辑1:
<>我正在创建一个调度应用程序,日历事件本质上代表属于一个更大的“约会”对象的单个任务。因此,当将鼠标悬停在单个“任务”上时,我希望在日历上显示其关联的“约会”范围,以帮助用户确定该任务是否可以移动到其他日期/时间
编辑2:
在FullCalendar的github回购协议上提交。将根据那里的任何发展情况进行更新
来自上述代码笔的代码
HTML
<div id="calendar"></div>
JAVASCRIPT
$(function() {
var calendar = $('#calendar');
var bgEvent = {
id: -1,
start: null,
end: null,
rendering: 'background',
backgroundColor: 'orange'
};
calendar.fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listWeek'
},
eventMouseover: function (event, jsEvent, view) {
console.log('in');
bgEvent.start = event.start;
bgEvent.end = event.end;
var events = calendar.fullCalendar('clientEvents', bgEvent.id);
if (events.length) {
var e = events[0];
calendar.fullCalendar('updateEvent', e);
}
else
calendar.fullCalendar('renderEvent', bgEvent);
},
eventMouseout: function (event, jsEvent, view) {
console.log('out');
calendar.fullCalendar('removeEvents', bgEvent.id);
},
defaultDate: '2017-11-06',
editable: true,
eventLimit: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
start: '2017-11-01'
},
{
title: 'Long Event',
start: '2017-11-07',
end: '2017-11-10'
},
{
id: 999,
title: 'Repeating Event',
start: '2017-11-09T16:00:00'
},
{
id: 999,
title: 'Repeating Event',
start: '2017-11-16T16:00:00'
},
{
title: 'Conference',
start: '2017-11-05',
end: '2017-11-07'
},
{
title: 'Meeting',
start: '2017-11-06T10:30:00',
end: '2017-11-06T12:30:00'
},
{
title: 'Lunch',
start: '2017-11-06T12:00:00'
},
{
title: 'Meeting',
start: '2017-11-06T14:30:00'
},
{
title: 'Happy Hour',
start: '2017-11-06T17:30:00'
},
{
title: 'Dinner',
start: '2017-11-06T20:00:00'
},
{
title: 'Movie',
start: '2017-11-07T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
start: '2017-11-28'
}
]
});
});
FullCalendar项目的Adam Shaw指出,“无论何时渲染或重新渲染任何事件,都会重新渲染所有事件。您看到的是前景事件的闪烁重新渲染,导致真正的鼠标移出。当进行了优化时,这将得到修复。”“无论何时触摸其任何事件,都会重新渲染日历”。据我所知,在悬停事件时不会发生完全重新渲染。“我在这里只是因为StackOverflow要求在共享codepen链接时出现代码”这是因为,根据StackOverflow.com/help/how-to-ask,问题本身中应该有足够的代码,以使问题重现。随着时间的推移,外部链接可能会改变、消失等。这个问题本身应该是有用的。这不仅仅是想惹你生气!演示是一个有用的额外功能,但您也可以在其中使用StackSnippet,因此,无论如何,您在鼠标事件中看到的行为并不是特别有帮助,我认为。也许值得向fullCalendar人员询问这是否是一个bug。同时,也许值得考虑的是,你想要的东西是否可以通过其他方式实现。是否可以始终显示此信息?不清楚为什么要在实际事件的正下方添加背景事件?你想达到什么目标?或者,它是否需要是鼠标事件?可以是点击事件吗?日历不会在鼠标上方重新呈现,不会;将新事件(后台事件)添加到日历时发生。这就是重新喷漆的时间。在我的实际用例中,我不想直接在悬停的事件下面画一个背景事件(尽管可能是这样),这只是一个人为的例子,使用FullCalendar提供的简单模板来报告bug。如果这是一个失败的原因,我可能需要走另一条路,而且很可能也会向fullCalendar的人报告。不过我想我应该先问一下可靠的人。