41

这就是我使用插件的方式:

jQuery( document ).ready( function() {
    jQuery('#booking-calendar').fullCalendar({
        header: {
            left: 'prev,next',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },
        editable: true,
        events: '<?php echo get_template_directory_uri() ?>/bookings-feed.php'
    });

    jQuery( '#apartment-selector' ).change( function() {
        apartment = jQuery( this ).val()
        jQuery('#booking-calendar').fullCalendar( 'removeEvents' )
        jQuery('#booking-calendar').fullCalendar( 'addEventSource',  {
            url: '<?php echo get_template_directory_uri() ?>/bookings-feed.php',
            type: 'POST',
            data: {
                apartment : apartment
            }
        })
    })
})

这就是它的外观:

在此处输入图像描述

如您所见,要跟踪事件的开始和结束时间有点困难,因此我正在考虑更改每个事件的颜色。

这里的问题是每个事件可能会在不同的周内拆分(如示例中),并且每周都有不同的 DOM 事件(这是有道理的)并且它们没有任何相关的类,

如何以不同的方式为每个事件着色?

4

4 回答 4

63

要对每个事件进行不同的着色,您可以采取几种方法来解决您的问题。

  1. 更新事件源“/bookings-feed.php”并将颜色(背景和边框)、背景颜色、文本颜色或边框颜色添加到事件对象http://arshaw.com/fullcalendar/docs/event_data/Event_Object/

     events: [{
         title  : 'event1',
         start  : '2010-01-01',
         color  : '#000'
     }]
    
  2. 分离并更新事件源以使用事件源。它允许您按颜色和文本颜色对事件进行分组。http://arshaw.com/fullcalendar/docs/event_data/events_array/

 $('#calendar').fullCalendar({
    eventSources: [
        // your event source
        {
            events: [ // put the array in the `events` property
                {
                    title  : 'event1',
                    start  : '2010-01-01'
                },
                {
                    title  : 'event2',
                    start  : '2010-01-05',
                    end    : '2010-01-07'
                },
                {
                    title  : 'event3',
                    start  : '2010-01-09 12:30:00',
                }
            ],
            color: 'black',     // an option!
            textColor: 'yellow' // an option!
        }
        // any other event sources...
    ]
});

于 2013-09-04T17:30:09.570 回答
23

您可以尝试使用 eventAfterRender 回调。检查文档

这样,您将获得“整体”事件,并根据随机选择操纵其颜色。

只是为了让您有所了解,我使用此回调,但颜色会根据事件发生的日期而改变。如果事件已安排、正在发生或已经发生,颜色会发生变化。

eventAfterRender: function (event, element, view) {
        var dataHoje = new Date();
        if (event.start < dataHoje && event.end > dataHoje) {
            //event.color = "#FFB347"; //Em andamento
            element.css('background-color', '#FFB347');
        } else if (event.start < dataHoje && event.end < dataHoje) {
            //event.color = "#77DD77"; //Concluído OK
            element.css('background-color', '#77DD77');
        } else if (event.start > dataHoje && event.end > dataHoje) {
            //event.color = "#AEC6CF"; //Não iniciado
            element.css('background-color', '#AEC6CF');
        }
    },
于 2013-09-05T13:18:27.560 回答
4

事件列表对象,其中您具有开始、结束、重叠、渲染等属性,您还有一个名为颜色的属性,您可以在其中指定事件的颜色。

查看下面使用颜色属性的演示代码:

        events: [
            {
                start: '2017-11-24',
                end: '2017-11-28',
                overlap: false,
                rendering: 'background',
                color: '#257e4a'
            },
            {
                start: '2017-11-06',
                end: '2017-11-08',
                overlap: false,
                rendering: 'background',
                color: '#ff9f89'
            }]
于 2017-12-16T04:25:29.950 回答
0

你可以这样做。eventsArr [{id...other..color..},{},]

           var SelectedData = eventsArr.filter(function (arr) {
                return arr.id === id;
            })[0];

设置颜色后,将颜色更新为与该 ID 关联的事件。在您的情况下,只需为通过这些 id 的每个循环分配不同的颜色。

var color = SelectedData.color;
$("#YourElementID").find("#ElementIDtoBeChanged").val(color);
于 2021-09-06T07:37:37.520 回答