[英]How to dynamically assign color to FullCalendar event
我正在嘗試在 FullCalendar 可選演示中實現一項功能,該功能使用戶能夠使用 HTML 顏色選擇器動態更改每個新日歷事件的顏色。 用戶應該能夠為每個事件選擇唯一的顏色。 例如,在當前設置中,生成的第一個事件采用顏色選擇器中選擇的任何顏色值。 然而,問題是第一個事件更改為為第二個事件選擇的任何顏色。 第二個(和后續)事件都應該有獨特的顏色。 我覺得我很接近這一點,但被卡住了。 建議?
JS:
$(document).ready(function() {
$("#calendar").fullCalendar({
header: {
left: "prev,next today",
center: "title",
right: "month,agendaWeek,agendaDay"
},
defaultView: "month",
navLinks: true, // can click day/week names to navigate views
selectable: true,
selectHelper: false,
editable: true,
eventLimit: true, // allow "more" link when too many events
select: function(start, end) {
var title = prompt("Event Content:");
var eventData;
if (title) {
eventData = {
title: title,
start: start,
end: end
};
$("#calendar").fullCalendar("renderEvent", eventData, true); // stick? = true
}
$("#calendar").fullCalendar("unselect");
},
eventRender: function(event, element) {
element
.find(".fc-content")
.prepend("<span class='closeon material-icons'></span>");
element.find(".closeon").on("click", function() {
$("#calendar").fullCalendar("removeEvents", event._id);
});
let color = $("#colorPicker").val();
element.css("background-color", color);
},
eventClick: function(calEvent, jsEvent) {
var title = prompt("Edit Event Content:", calEvent.title);
calEvent.title = title;
$("#calendar").fullCalendar("updateEvent", calEvent);
},
});
});
HTML:
<div id='calendar'></div>
<span><input type='color' id='colorPicker'></span>
CSS:
body {
margin: 40px 10px;
padding: 0;
font-family: "Lucida Grande", Helvetica, Arial, Verdana, sans-serif;
font-size: 14px;
}
#calendar {
max-width: 900px;
margin: 0 auto;
}
#wrap {
width: 1100px;
margin: 0 auto;
}
.closeon {
border-radius: 5px;
}
依賴:
https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.js
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js
https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js
https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.css
您可以在select
回調中設置顏色:
eventData = {
title: title,
start: start,
end: end,
color: $("#colorPicker").val()
}
並擺脫所有eventRender: function()
等代碼。 該回調針對日歷上的每個事件運行(即使您僅添加一個新事件,它們也都將重新呈現,因為日歷必須能夠更改其他事件,例如,如果有重疊或其他情況)。 這就是為什么您還在所有先前創建的事件上看到顏色變化的原因。
PS此文檔向您展示了如何在創建事件時設置顏色(而不是弄亂HTML,因為事件可以在不同的情況下以不同的方式呈現,所以這總是不可靠的): https : //fullcalendar.io/文檔/事件對象
當用戶單擊事件時,您可以通過兩種方式更改顏色。
var calendar = new Calendar(calendarEl, {
eventClick: function(info) {
alert('Event: ' + info.event.title);
alert('Coordinates: ' + info.jsEvent.pageX + ',' + info.jsEvent.pageY);
alert('View: ' + info.view.type);
// change the border color just for fun
info.el.style.borderColor = 'red';
}
});
const event = calendar.getEventById(eventId);
event.setProp("color", newEventColor);
要使所有其他事件成為隨機顏色,可以嘗試這樣的操作
calendar.removeAllEvents();
const newEventsWithRandomColor = [];
for(event of allOtherEvents){
event = {
id: event.id,
title: event.title,
start: event.start,
allDay : true,
color : randomColorFunction();
};
newEventsWithRandomColor.push(event);
}
fullCalendar.addEventSource(newEventsWithRandomColor);
您可以從Controller執行此操作。 我在這里定義兩件事。 1)顏色2)類名。
如果您只想更改背景顏色,那么您可以從'color'=>'red'
或者如果您想更改某些內容,則可以定義className=>'eventHoiday'
之后無需更改您的 JS 代碼。
$events[] = array(
'id' => $driverBooking->id,
'booking_id'=> $driverBooking->id,
'color' => $color, // an optional value !
'className'=> 'EventHoliday' // an optional value !
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.