【问题标题】:fullcalendar dynamically change default view based on screen widthfullcalendar 根据屏幕宽度动态更改默认视图
【发布时间】:2019-11-08 00:28:57
【问题描述】:

我正在使用 fullcalendar,下面的代码可以让我在使用 turbolinks 的同时渲染 fullcalendar。

function eventCalendar() {
  return $('#event_calendar').fullCalendar({
    defaultView: 'agendaWeek',
    header: {
        left: 'prev,today,next',
        center: 'title',
        right: 'agendaDay,agendaWeek'
    },    
  });
};
function clearCalendar() {
  $('#event_calendar').fullCalendar('delete'); // In case delete doesn't work.
  $('#event_calendar').html('');
};
$(document).on('turbolinks:load', eventCalendar);
$(document).on('turbolinks:before-cache', clearCalendar)

但是我想动态地 changeView defaultView 基于screenWidth。像这样的东西,但由于某种原因它不起作用:

if (window.innerWidth < 800) {
            $('#event_calendar').fullCalendar('changeView', 'agendaDay');
        }

if(window.innerWidth < 800){
    $('#event_calendar').fullCalendar('changeView', 'agendaDay');
}else{
    $('#event_calendar').fullCalendar('changeView', 'agendaWeek');
}

如何使其适应我的日历?请帮忙!

【问题讨论】:

  • 您使用的是什么版本的全日历?还有,你是怎么安装的?

标签: javascript ruby fullcalendar turbolinks fullcalendar-3


【解决方案1】:

如果“动态更改”是指您想在用户调整浏览器大小时更改它,那么您需要监听窗口调整大小。

$(window).resize(function() {
  if(window.innerWidth < 800){
    $('#event_calendar').fullCalendar('changeView', 'agendaDay');
  } else {
    $('#event_calendar').fullCalendar('changeView', 'agendaWeek');
  }
});

还要检查您的浏览器控制台是否有错误。从 4.0+ 版本开始,这些视图已重命名为 see changelog,因此您可能需要像这样传递不同的视图名称:

$(window).resize(function() {
  if(window.innerWidth < 800){
    $('#event_calendar').fullCalendar('changeView', 'timeGridDay');
  } else {
    $('#event_calendar').fullCalendar('changeView', 'timeGridWeek');
  }
});

【讨论】:

    【解决方案2】:

    如果有人对这里感兴趣,您将如何使用 React/Typescript 进行操作。

    import React, { FunctionComponent } from 'react';
    import FullCalendar, { ViewContentArg } from '@fullcalendar/react';
    import dayGridPlugin from '@fullcalendar/daygrid';
    import timeGridPlugin from '@fullcalendar/timegrid';
    import interactionPlugin from '@fullcalendar/interaction';
    
    const Calendar: FunctionComponent = (): JSX.Element => {
        const handleSize = (event: ViewContentArg): void => {
            let contentAPi = event.view.calendar;
            if (window.innerWidth < 800) {
                contentApi.changeView('timeGridDay');
            } else {
                contentApi.changeView('timeGridWeek');
            }
        }
        return <FullCalendar
            plugins={ [dayGridPlugin, timeGridPlugin, interactionPlugin] }
            windowResize={ handleSize }
        />
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-30
      • 2017-01-25
      • 1970-01-01
      • 2013-05-23
      • 2016-08-28
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多