我使用的是Ruby 2 Rails 4。我正在使用twitter bootstrap rails gem让我的导航栏在浏览器调整大小时崩溃。
我想要亚当·肖的《完整日历》有类似的效果。现在它将随窗口调整大小,但我希望它在浏览器为480px或更低时显示一天(basicDay视图),在视口为767以下时显示一周(basicWeek视图),并在全尺寸窗口中显示月份视图。
如果浏览器大小不同,初始化三个不同的日历会更好吗?
即:
<script> $(document).ready(function() {
// page is now ready, initialize the calendar...
$('#calendar').fullCalendar({
events: 'http://www.google.com/calendar/myfeed',
if $(window).width() < 514){
defaultView: 'basicDay'
}
header: {
left: 'title',
center: '',
right: 'today basicDay basicWeek month prev,next'
},
});
});
</script>
或者有更简单、更简单的解决方案吗?
此外,我在这方面真的很新,我知道上面的示例代码不会像写的那样工作,但我至少走对了吗?
谢谢,很抱歉,如果这是在其他地方写的,我找不到,但如果有人给我指明正确的方向,我会很高兴。
更新:
作为对第一条评论的回应,为了让它发挥作用,我进入了fullcalendar.js,并更改了主渲染的工作方式(第240行)
/* Main Rendering
-----------------------------------------------------------------------------*/
setYMD(date, options.year, options.month, options.date);
function render(inc) {
if (!content) {
initialRender();
}
else if (elementVisible()) {
// mainly for the public API
calcSize();
_renderView(inc);
}
}
function initialRender() {
tm = options.theme ? 'ui' : 'fc';
element.addClass('fc');
if (options.isRTL) {
element.addClass('fc-rtl');
}
else {
element.addClass('fc-ltr');
}
if (options.theme) {
element.addClass('ui-widget');
}
content = $("<div class='fc-content' style='position:relative'/>")
.prependTo(element);
header = new Header(t, options);
headerElement = header.render();
if (headerElement) {
element.prepend(headerElement);
}
changeView(options.defaultView);
if (options.handleWindowResize) {
$(window).resize(windowResize);
}
// needed for IE in a 0x0 iframe, b/c when it is resized, never triggers a windowResize
if (!bodyVisible()) {
lateRender();
}
// added this to specify how initial rendering should act on mobile devices.
if ( $(window).width() < 480){
changeView('agendaDay')
};
}
正如你所看到的,我添加了"if($(window).width…",然而,这本身并不是一个很好的解决方案,因为它只解决了我的一半问题。初始渲染在移动窗口和浏览器窗口中都是正确的,但日历不会对浏览器窗口中的大小调整做出响应。将MarCrazyness的答案与上述解决方案相结合,解决了在浏览器中调整大小的问题。
我现在的看法是:
Schedule.html.erb$(document).ready(function){
$('#calendar').fullCalendar({
events: 'http://www.google.com/calendar/...',
weekMode: 'liquid',
defaultView: 'agendaWeek',
allDaySlot: false,
header: {
left: 'title',
center: 'agendaDay,agendaWeek,month',
right: 'today prev,next'
},
windowResize: function(view) {
if ($(window).width() < 514){
$('#calendar').fullCalendar( 'changeView', 'agendaDay' );
} else {
$('#calendar').fullCalendar( 'changeView', 'agendaWeek' );
}
}
});
});
</script>
注意:我更改了标题设置,但这对于该解决方案的工作来说并不是必需的。
希望这两种策略中的一种或组合能满足您的需求,如果您有一个更简单的解决方案,或者改进了任何一个答案,请加入进来,非常感谢大家的帮助。
看起来您正试图根据调整大小来更改视图。看看windowResize回调。http://arshaw.com/fullcalendar/docs/display/windowResize/.
确保handleWindowResize是它的默认值true。否则将不会调用回调。
windowResize: function(view) {
if ($(window).width() < 514){
$('#calendar').fullCalendar( 'changeView', 'basicDay' );
} else {
$('#calendar').fullCalendar( 'changeView', 'month' );
}
}