jQuery 日曆控件 FullCalendar 初識

最近有個日程管理的需求,就學習了一下 FullCalendar 控件的一些基本知識,本文不是詳細介紹該控件的 API 的文檔,而是記錄本人使用過程當中的一些學習狀況。html

先看一下效果圖  月/周/日視圖  黃色表示今天:數據庫

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其中有兩個事項,rrr 和 test 是名稱,7a 和 5a 是開始時間,其中 a 表示上午,同理 p 表示下午,周視圖和日視圖左側都有時間軸。json

在 html 中創建一個空的 div :函數

<div id='fullCalendarDemo'>
</div>

接下來就是 js 代碼了,詳細的解釋會寫在註釋裏,能夠配合插圖看,方便理解,代碼中寫 //TODO 的地方須要本身編寫相關界面代碼,通常爲彈窗,或者新頁面等來對事項進行增刪改:學習

$(document)
    .ready(
        function() {
            $('#fullCalendarDemo')
                .fullCalendar({                                  //初始化日曆
                    header: {                     //日曆最上面表示頭部
                        left: 'prev,next today',          //左邊是 前一月/周/日,後一月/周/日  以及  回到今天按鈕
                        center: 'prevYear,title,nextYear',    //中間是  去年的本月/周/日  當前試圖的時間   明年的本月/周/日
                        right: 'month,agendaWeek,agendaDay'   //切換日曆顯示月/周/日視圖
                    },
                    monthNames: ["一月", "二月", "三月", "四月",  //設置月份名稱,中英文都可
                        "五月", "六月", "七月", "八月", "九月",
                        "十月", "十一月", "十二月"
                    ],
                    monthNamesShort: ["一月", "二月", "三月",   //設置月份的簡稱
                        "四月", "五月", "六月", "七月", "八月",
                        "九月", "十月", "十一月", "十二月"
                    ],
                    dayNames: ["週日", "週一", "週二", "週三",   //設置星期名稱
                        "週四", "週五", "週六"
                    ],
                    dayNamesShort: ["週日", "週一", "週二",     //設置星期簡稱
                        "週三", "週四", "週五", "週六"
                    ],
                    today: ["今天"],                 //today 按鈕的顯示名稱
                    firstDay: 0,                   //設置每星期的第一天是星期幾,0 是星期日
                    buttonText: {                  //設置按鈕文本
                        today: '今天',
                        month: '月',
                        week: '周',
                        day: '日',
                        prev: '上一月',
                        next: '下一月'
                    },
                    height: windowHeigth,             //設置日曆高度,寬度是自適應的,很差改,windowHeight 是我計算的值
                    currentTimezone: 'Asia/Beijing',       //設置時區
                    theme: true,                  //true 時日曆主題可隨 jQuery ui 的主題變化
                    selectable: true,               //元素是否能夠被選中
                    selectHelper: true,              //選中元素時是否顯示相關信息
                    select: function(startDate, endDate,    //選中某元素的方法,startDate 事項的起始時間,endDate 事項的結束時間
                        allDay, jsEvent, view) {         // allDay 事項是否爲全天事項,jsEvent 控件的內置對象,view 當前視圖
                        var startD = $.fullCalendar
                            .formatDate(startDate,
                                'yyyy-MM-dd HH:mm:ss');     //formatDate 是格式化時間的方法
                        var endD = $.fullCalendar
                            .formatDate(endDate,
                                'yyyy-MM-dd HH:mm:ss');
                        //TODO      添加選中某元素時須要進行操做的方法,好比:添加會議、備註等事項
                    },
                    eventClick: function(event) {         //點擊事項的方法
                        var startD = $.fullCalendar
                            .formatDate(event.start,
                                'yyyy-MM-dd HH:mm:ss');
                        var endD = $.fullCalendar
                            .formatDate(event.end,
                                'yyyy-MM-dd HH:mm:ss');
                        //TODO      添加點擊某事項時須要進行操做的方法,好比:修改會議、備註等事項
                    },
                    editable: true,                 //事項是否可編輯,改變大小、拖拽等
                    eventResize: function(event, dayDelta, minuteDelta, revertFunc) { 
            //事項大小改變後的方法,每每修改事項的起止時間,event 改變的事項,dayDelta 變化的天數,minuteDelta 變化的分鐘數,revertFunc 回調函數 var startD = $.fullCalendar .formatDate(event.start, 'yyyy-MM-dd HH:mm:ss'); var endD = $.fullCalendar .formatDate(event.end, 'yyyy-MM-dd HH:mm:ss'); //TODO 添加改變某事項大小時須要進行操做的方法,好比:修改會議、備註等事項 if (!confirm("is this okay?")) { revertFunc();         //若是不要改變,則將事項還原 } }, eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) { //拖拽事項以後的方法,allDay 是否全天事項,其餘參數同上 var startD = $.fullCalendar .formatDate(event.start, 'yyyy-MM-dd HH:mm:ss'); var endD = $.fullCalendar .formatDate(event.end, 'yyyy-MM-dd HH:mm:ss'); //TODO 添加拖拽某事項以後須要進行操做的方法,好比:修改會議、備註等事項 if (!confirm("is this okay?")) { revertFunc(); } }, events: function(start, end, callback) { //獲取事項的數據,這裏是用的 function ,能夠是 array ,也能夠是 json } }); });

另外,還有幾個經常使用的方法:測試

$('#fullCalendarDemo').fullCalendar('refetchEvents');     對事項進行增刪改以後能夠用來單獨刷新日曆控件,而不要從新讀取數據庫fetch

$('#fullCalendarDemo').fullCalendar('updateEvent', event);    單獨刷新指定事項ui

$('#fullCalendarDemo').fullCalendar( 'gotoDate', year [, month, [ date ]] );     查看指定日期的日程,須要注意的是月份是從0開始的,即1月份爲0,2月份爲1······this

通常日期的存儲會用 String 類型,在 parseInt 時有一點須要注意的是 IE 8 的不兼容(其餘版本 IE 未測試)。spa

最後,就說說控件內置的 event Object 對象,只說幾個我認爲比較須要談的參數:title、start 必選,考慮到數據存儲的問題,id 最好也是必選的,若是是全天事項,即 allDay 爲 true,則 end 能夠不填, 我的建議當這種狀況時,能夠設置 end 爲當天的 00:00:00。

完整 API 請移步官網文檔

相關文章
相關標籤/搜索