【问题标题】:Fullcalendar's fc-highlight not applied on day change in custom calendarFullcalendar 的 fc-highlight 不适用于自定义日历中的日期更改
【发布时间】:2019-04-30 19:47:37
【问题描述】:

我有一个从第 1 天晚上 8 点到第 2 天晚上 8 点运行的 Fullcalendar 调度程序视图

将事件拖到日历上时,.fc-highlight 类仅适用于 Day1 8PM-11.59PM。将事件悬停在第 2 天时,不应用 .fc-highlight 类

这些是我的活动

<div id='external-events'>
        <div class='fc-event'>
            My Awesome Event
        </div>
        <div class='fc-event'>
            Foo
        </div>
        <div class='fc-event'>
            Bar
        </div>
</div>

这就是我将时间从晚上 8 点设置到晚上 8 点的方式

minTime: "20:00:00", // this makes the calendar start at 8PM
maxTime: "1.20:00:00", // this makes the calender end 24 hours later at 8PM ( (8PM => 20) + 24 = 44)

我已经设置了一个演示 here

尝试选择一个事件并将其拖到晚上 11 点。背景是灰色的。悬停到第二天,背景消失。

我希望 .fc-highlight 类保持活跃

【问题讨论】:

  • 我认为这是因为您使用的是日视图,然后通过将 maxTime 设置为高于午夜来破坏它。可能在代码中的某个地方,它遇到了午夜的硬限制,它不会将该类添加到除此之外的字段中。我还没有研究过代码,但这就是我所能假设的。您可能想尝试使用visibleRange 定义,如有必要,可能与custom view 结合使用,以显示您想要的时间段。我怀疑这可能会更好。
  • @ADyson 感谢您的回复。经过一些尝试,看起来问题是由minTime 设置与天数相结合引起的。看看这个小提琴jsfiddle.net/jvddrift/qa4kgLr1/18 在这里你可以看到在第 1 天晚上 11 点后背景消失,但在第二天晚上 8 点重新出现。将 dayCount 设置为 2,使背景在凌晨 12 点后出现,但在凌晨 2 点后再次消失我还没有解决方案。
  • @ADyson visibleRange 似乎只接受date,不接受time。将其从 2019-04-29T:20:00:00 设置为 2019-04-30T:20:00:00 会使日历从 '00:00' 开始并运行到晚上 11:59:59
  • 在您的 JS 小提琴示例中,您 a) 使用了“validRange”而不是“visibleRange”,b) 没有删除“minTime”限制,该限制将在任何一天晚上 8 点之前停止显示任何时间, c)据我所知,甚至没有尝试指定范围对象内的时间。此外,范围对象似乎指定了 7 天,而不是 24 小时。如果这是你的尝试,我认为你还没写完?试试这个版本:jsfiddle.net/Lzuv5kog
  • 事实上,你也没有让它成为动态的,所以下一个/上一个按钮没有做任何事情。它只是永远停留在同一个日期。尝试实现可见范围文档中提到的回调函数:jsfiddle.net/Lzuv5kog/1

标签: css fullcalendar highlight


【解决方案1】:

问题似乎是因为您使用的是“日”视图,然后通过将“maxTime”设置为高于午夜来破坏它。可能在 fullCalendar 代码中的某个地方,它遇到了午夜的硬限制,在该限制之外它不会将该类添加到该字段中。我没有研究过代码,但根据观察到的行为,我只能假设这些。

在视图中定义这样的自定义时间段的正确方法是使用visibleRange,并可选择将其与custom view 结合使用(特别是如果您还想在日历中使用其他视图)。

这是一个可见范围定义的示例,它将满足您的需求。时间线将始终从当前选定日期的晚上 8 点显示到第二天的晚上 8 点。您不应同时指定任何其他选项,例如 dayCount 或 minTime/maxTime,因为它们会扭曲最终显示:

visibleRange: function(currentDate) {
  return {
   start: currentDate.clone().startOf("day").add('20', 'h'),
   end: currentDate.clone().startOf("day").add('1', 'd').add('20', 'h')
  }
}

这是一个完整的工作演示,使用该范围定义作为自定义时间线视图的一部分,基于您之前发布的小提琴:https://jsfiddle.net/Lzuv5kog/1/

【讨论】:

  • 感谢您与我一起思考!我知道我的小提琴没有很好地清理,抱歉。您的示例非常有效,但是我对此有一个问题。日历只能在特定日期之间使用,例如周一到下周日这就是我添加validRange的原因。但我知道这会破坏工作示例?
  • 好的,从技术上讲,这不是您最初询问的内容,但您没有理由不能在其旁边添加一个 validRange。 jsfiddle.net/dv5j0khf/1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多