FullCalendar - Change View for Mobile Devices
Use function to detect mobile:
window.mobilecheck = function() {
var check = false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
return check;
};
After that, on initalizing calendar, call this function and set defaultView like this:
defaultView: window.mobilecheck() ? "basicDay" : "agendaWeek"
Full calendar Mobile view
I used eventAfterAllRender. The function will handle the checking if the user uses a mobile device, it is a mobile device then it will simply change the calendar view from the default agendaWeek
into agendaDay
using the changeView method.
$(document).ready(function() { $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay,listWeek' }, defaultView: 'agendaWeek', defaultDate: '2018-03-12', events: [ { title: 'All Day Event', start: '2018-03-01', }, { title: 'Long Event', start: '2018-03-07', end: '2018-03-10' }, { id: 999, title: 'Repeating Event', start: '2018-03-09T16:00:00' }, { id: 999, title: 'Repeating Event', start: '2018-03-16T16:00:00' }, { title: 'Conference', start: '2018-03-11', end: '2018-03-13' }, { title: 'Meeting', start: '2018-03-12T10:30:00', end: '2018-03-12T12:30:00' }, { title: 'Lunch', start: '2018-03-12T12:00:00' }, { title: 'Meeting', start: '2018-03-12T14:30:00' }, { title: 'Happy Hour', start: '2018-03-12T17:30:00' }, { title: 'Dinner', start: '2018-03-12T20:00:00' }, { title: 'Birthday Party', start: '2018-03-13T07:00:00' }, { title: 'Click for Google', url: 'http://google.com/', start: '2018-03-28' } ], eventAfterAllRender: function(view) { if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { $('#calendar').fullCalendar('changeView', 'agendaDay'); } //IF MOBILE CHANGE VIEW TO AGENDA DAY } }); });
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script><script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js'></script><script src='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.min.js'></script><link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.9.0/fullcalendar.css'><div id='calendar'></div>
Fullcalendar callback on mobile devices
It turned out that Angular Material 1.1.10 interfere with fullcalendar. It overrides touch handling in some way. And event is recognized as mousedown instead of touchstart.
Solution is to remove all pointer events from:
var START_EVENTS = 'mousedown touchstart pointerdown';
var MOVE_EVENTS = 'mousemove touchmove pointermove';
var END_EVENTS = 'mouseup mouseleave touchend touchcancel pointerup pointercancel';
via https://stackoverflow.com/a/42620599/5940387
How to make FullCalendar work on touch devices?
Have you tried including the Jquery UI Touch Punch?
By default, Jquery UI doesn't support Touch Events because it wasn't optimized for mobile devices.
Touch Punch solved my problems with the Jquery UI Drag&Drop functionalities, which seem to be used by FullCalendar as well.
Hope it helps!
fullcalendar dynamically change default view based on screen width
If by "dynamically change" you mean you want to change it when the user resizes their browser, then you need to listen for window resize.
$(window).resize(function() {
if(window.innerWidth < 800){
$('#event_calendar').fullCalendar('changeView', 'agendaDay');
} else {
$('#event_calendar').fullCalendar('changeView', 'agendaWeek');
}
});
But also check your browser console for errors. It looks like as of version 4.0+ those views have been renamed see changelog so you may need to pass different view names like this:
$(window).resize(function() {
if(window.innerWidth < 800){
$('#event_calendar').fullCalendar('changeView', 'timeGridDay');
} else {
$('#event_calendar').fullCalendar('changeView', 'timeGridWeek');
}
});
FullCalendar.js adjust header for mobile
Give each of them a width:100%;
and display:block;
that should do the trick.
At least I was able to get the demo one on teh fullcalendar.js website to do that.
You will then have to align them as you see fit.
.fc-header-left, fc-header-center, fc-header-right {
width: 100%;
display: block;
}
Related Topics
How to Loop Over Object Properties With Ngfor in Angular
How to Autoplay a Music Using Audio Tag in Jquery
Convert Hex to Binary in JavaScript
Javascript/Dom: How to Remove All Event Listeners of a Dom Object
Angular 4 Submit Form by Pressing Enter With Login Button
How to Include a JavaScript in a Jsp Page
How to Fix: Typeerror: Document.Queryselector(...) Is Null
How to Add Space Between Every 4 Characters in JavaScript
Linking Directly to an Open Modal Window Through a Url
Next.Js Implement External ".Js" With <Script>
Pull Variable Value from JavaScript Source Using Beautifulsoup4 Python
Weird Behaviour With on Click Event Binding; Event Not Firing
How to Pass Django Variable into JavaScript
How to Get the Timezone Name in JavaScript
React - Clearing an Input Value After Form Submit
415 (Unsupported Media Type) With Rest Post Request
Converting Json Object to CSV Format in JavaScript
How to Handle Multiple Submit Buttons in a Form Using Angular Js