Есть ли способ предотвратить перекрывающиеся события в jQuery FullCalendar?
Есть ли способ предотвратить совпадение событий в jQuery FullCalendar?
Ответ 1
Я сделал функцию, которая проверяет, перекрывает ли данное событие другое или нет. Возвращает true, если событие перекрывает другие и false в противном случае.
function isOverlapping(event){
var array = calendar.fullCalendar('clientEvents');
for(i in array){
if(array[i].id != event.id){
if(!(Date(array[i].start) >= Date(event.end) || Date(array[i].end) <= Date(event.start))){
return true;
}
}
}
return false;
}
Вы можете использовать его при удалении или изменении размера и событии, а если совпадение событий с другим, используйте revertFunc, который получен в обратных вызовах eventDrop и eventResize, или отмените создание события в выбранном обратном вызове. Чтобы использовать его в выбранном обратном вызове, создайте событие dummie:
var event = new Object();
event.start = start;
event.end = end;
Ответ 2
Начиная с версии 2.20 это изменение было включено по умолчанию...
использовать
eventOverlap: false
Ответ 3
То же, что и ответ ecruz, но с логикой, которая лучше работала для меня.
function isOverlapping(event){
// "calendar" on line below should ref the element on which fc has been called
var array = calendar.fullCalendar('clientEvents');
for(i in array){
if (event.end >= array[i].start && event.start <= array[i].end){
return true;
}
}
return false;
}
Ответ 4
То же, что и Мэтью Уэбб, но после работал у меня, так как иногда моя дата окончания была нулевой, когда я перетаскивал событие из allDay в некоторый временной интервал
function isOverlapping(event) {
var arrCalEvents = $('#' + g_str_FullCalenderID).fullCalendar('clientEvents');
for (i in arrCalEvents) {
if (arrCalEvents[i].id != event.id) {
if ((event.end >= arrCalEvents[i].start && event.start <= arrCalEvents[i].end) || (event.end == null && (event.start >= arrCalEvents[i].start && event.start <= arrCalEvents[i].end))) {//!(Date(arrCalEvents[i].start) >= Date(event.end) || Date(arrCalEvents[i].end) <= Date(event.start))
return true;
}
}
}
return false;
}
Ответ 5
Просто добавьте
eventOverlap: false
как один из ваших параметров вне элемента событий.
Вы также можете добавить опцию
overlap
для одного события, которое переопределит eventOverlap в этом единственном событии.
events: [
{
title : 'event1',
start : '2017-05-27'
},
{
title : 'event2',
start : '2017-05-28',
end : '2017-05-29'
},
{
title : 'event3',
start : '2017-05-30T12:30:00',
allDay : false, // will make the time show
draggable: true,
editable: true,
overlap: true,
},
{
title : 'event3',
start : '2017-05-30T09:30:00',
allDay : false, // will make the time show
draggable: true,
editable: true,
}
],
eventOverlap: false
Ответ 6
eventResize: function (event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view) {
var start = new Date(event.start);
var end = new Date(event.end);
var events = event.source.events;
for (var i = 0; i < events.length; i++) {
var someEvent = events[i];
if (someEvent._id == event._id)
{
continue;
}
var seStart = new Date(someEvent.start);
var seEnd = new Date(someEvent.end);
if ((start < seEnd) && (seStart < end)) {// dates overlap
revertFunc();
}
}
},
Ответ 7
Я использую версию 2.11 Fullcalendar, и я внесла некоторые изменения в код, отправленный ecruz:
function isOverlapping(event){
var array = calendar.fullCalendar('clientEvents');
for(i in array){
if(array[i]._id != event._id){
if(!(array[i].start.format() >= event.end.format() || array[i].end.format() <= event.start.format())){
return true;
}
}
}
return false;
}
и это я использую для предотвращения перекрытия:
$('#calendar').fullCalendar({
...
eventDrop: function(event, delta, revertFunc) {
if (isOverlapping(event)) {
revertFunc();
}
},
...
});
Ответ 8
просто попробуйте это, отлично работает для меня.... https://fullcalendar.io/docs/event_ui/eventOverlap/
eventOverlap: function(stillEvent, movingEvent) {
return stillEvent.allDay && movingEvent.allDay;
}
Ответ 9
allowCalEventOverlap: [boolean | default: false] - может ли календарь перекрывать события. События будут перемещаться или изменяться по мере необходимости, если они перетаскиваются или изменяются по размеру до места, которое перекрывает другое событие календаря.
это то, что вы искали?
Ответ 10
Попробуйте следующее:
$('#calendar').fullCalendar({slotEventOverlap : false});
В соответствии с документацией.