#javascript #html #fullcalendar #fullcalendar-5
#javascript #HTML #fullcalendar #fullcalendar-5
Вопрос:
У меня есть следующая html-страница, которая использует fullcalendar:
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'timeGridWeek',
editable: true,
headerToolbar: {
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
},
selectable: true, //can click to set event
selectMirror: true, // so it's solid
unselectAuto: false, //if you click outside calendar, event doesn't disappear, but if you click inside calendar, event still disappears
editable: true,
eventStartEditable: true,
eventResizableFromStart: true,
eventDurationEditable: true,
select: function(selectionInfo) {
calendar.addEvent({
title: 'dynamic event',
start: selectionInfo.start,
end: selectionInfo.end //need these and not endTime/startTime, otherwise they won't re-render
});
}
});
calendar.render();
});
<!DOCTYPE html>
<html>
<head>
<title>Fullcalendar Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.min.css" />
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.min.js"></script>
</head>
<body>
<div id="calendar"></div>
</body>
</html>
Когда календарь находится в режиме просмотра недели, и я нажимаю (просто нажимаю один раз и ничего не делаю — это важно) где-нибудь, создается 30-минутное событие (время начала и окончания зависит от того, где вы нажимаете), и я могу видеть время начала и окончания на экранесобытие, но не заголовок («динамическое событие»). Только когда я нажимаю в другом месте календаря, я вижу заголовок, отображаемый на вышеупомянутом событии. Я подтвердил через консоль.регистрируйте утверждения (не в коде) о том, что заголовок фактически присутствует в объекте события в javascript, но есть ли способ, чтобы заголовок был сразу виден одним щелчком мыши (так что, вероятно, что-то, что нужно сделать в функции выбора)?
Ответ №1:
Вам просто нужно запустить calendar.unselect();
после добавления события, чтобы элемент, который визуализирует выделение (который из-за опции selectMirror является сплошным, а не прозрачным), не накладывался поверх отображаемого события.
Выбранные элементы не будут удалены автоматически, пока вы не нажмете где-нибудь еще (если у вас нет unselectAuto: true
в настройках).
Соответствующая документация:
https://fullcalendar.io/docs/Calendar-unselect
https://fullcalendar.io/docs/unselectAuto
ДЕМОНСТРАЦИЯ:
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'timeGridWeek',
editable: true,
headerToolbar: {
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
},
selectable: true, //can click to set event
selectMirror: true, // so it's solid
unselectAuto: false, //if you click outside calendar, event doesn't disappear, but if you click inside calendar, event still disappears
editable: true,
eventStartEditable: true,
eventResizableFromStart: true,
eventDurationEditable: true,
select: function(selectionInfo) {
calendar.addEvent({
title: 'dynamic event',
start: selectionInfo.start,
end: selectionInfo.end //need these and not endTime/startTime, otherwise they won't re-render
});
calendar.unselect();
}
});
calendar.render();
});
<!DOCTYPE html>
<html>
<head>
<title>Fullcalendar Demo</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.min.css" />
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.0/main.min.js"></script>
</head>
<body>
<div id="calendar"></div>
</body>
</html>