網頁前端行事曆,今天要來講解如何使用FullCalendar行事曆套件,官方提供許多的Demo範例,但卻霧煞煞不知道哪個功能要去哪個地方設定?我在剛出社會也遇到這個問題,不如自己寫一個FullCalendar教學,實作一些基本功能給大家,配合SweetAlert2來顯示內容讓大家參考,更快地進入狀況。
一樣有任何問題或是需要補充的都可以在最下方留言,我會在一週內回覆或email您來解答。
FullCalendar 官網(有範例參考)
FullCalendar GitHub(程式原始碼)
先玩玩認識行事曆吧
- 切換月
- 點選上方Today按鈕可跳回當天
- 點擊 Month、Week、Day看畫面的不同
- 點擊事件(ex: All Day Event、Holiday)
- 點擊一個空白日期
- 多選日期(按著滑鼠)
網頁前端行事曆-FullCalendar
開始建立全新的行事曆
步驟說明
- 引入套件CSS、JavaScript
– 無 CSS 目前不需要
– JavaScript 放置於 </body> 之前 (版本為 6.1.11) - 加入HTML、JavaScript
– 加入<div id=”calendar”></div>
– JavaScript區塊 new FullCalendar 來創建新的行事曆
– 於 new FullCalendar.Calendar 內加入行事曆相關屬性(功能) ex: initialView、headerToolbar - 附上程式碼(下方有說明)
<body>
<!-- Calendar position -->
<div id="calendar"></div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const calendarEl = document.getElementById("calendar")
const calendar = new FullCalendar.Calendar(calendarEl, {
initialView: "dayGridMonth",
headerToolbar: {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay",
},
buttonText: {
today: "Today",
month: "Month",
week: "Week",
day: "Day",
},
})
calendar.render()
})
</script>
<!-- fullcalendar origin code-->
<script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js'></script>
</body>
程式碼說明
第6行: document.addEventListener(“DOMContentLoaded”用來確保HTML的DOM已經完全載入
第7行: document.getElementById(“calendar”)取得HTML id為calendar的element
第8行: new FullCalendar.Calendar創建一個新的Calendar實例(讓你可以使用修改它的屬性功能)
第9行: initialView 一開始預設為 dayGridMonth 表示用月顯示行事曆
第10行: headerToolbar 用來設定行事曆最上方按鈕功能位置
第15行: buttonText 用來修改上方按鈕功能文字
第22行: calendar.render() 渲染整個實作好的calendar
加入行事曆 Event
步驟與說明
– 加入 events 陣列屬性
– 加入物件內容 title、start、end、className…
– 加入event後如果有給時間(2024-03-02 12:00:00)可以切換Month、Week、Day看畫面的不同
在 Week、Day 可以看到起始結束時間
<style>
.holidayEvent {
background-color: #e5be20;
border-color: #e5be20;
}
</style>
<body>
<!-- Calendar position -->
<div id="calendar"></div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const calendarEl = document.getElementById("calendar")
const calendar = new FullCalendar.Calendar(calendarEl, {
initialView: "dayGridMonth",
headerToolbar: {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay",
},
buttonText: {
today: "Today",
month: "Month",
week: "Week",
day: "Day",
},
// ----- 本段落新增開始 -----
events: [ // Events
{
title: "All Day Event",
start: "2024-03-02",
},
{
title: "Time Event",
start: "2024-03-02 12:00:00",
},
{
title: "Holiday",
start: "2024-03-03 12:00:00",
end: "2024-03-06 16:00:00",
textColor: "#000",
className: "holidayEvent"
},
{
title: "Home Page",
start: "2024-03-08",
url: "網址路徑"
},
]
// ----- 本段落新增結束 -----
})
calendar.render()
})
</script>
<!-- fullcalendar origin code-->
<script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js'></script>
</body>
這邊先將比較常用的提出來,有其他想看的再加上來
屬性 | 功能 |
title | Event文字 |
start | Event開始時間 1.未給時間則表示全天 ex: 2024-03-02 2.給時間 ex: 2024-03-02 12:00:00 |
end | Event結束時間 1.未給時間則表示全天 ex: 2024-03-03 2.給時間 ex: 2024-03-03 14:00:00 |
className | Event可加入自定義的 css class |
textColor | 修改Event文字顏色 |
url | 點擊Event導至相對應的路徑 |
加入 Event 點擊事件
步驟與說明
– 加入 eventClick: function(info){ } 點擊後觸發
– console.log(info.event) event 就是上一個段落所創建的event物件
可以看到有title、start、end、className、textColor…的key
– Swal.fire 是 Sweetalert2 跳窗Modal的功能
這部分可以放自己想要的功能(搭配info.event來應用)
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- sweetAlert2 css -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css" rel="stylesheet">
<style>
/* 滑鼠指到Event時變成手指,也可以自己寫一個class處理 */
.fc-event {
cursor: pointer;
}
</style>
</head>
<body>
<!-- Calendar position -->
<div id="calendar"></div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const calendarEl = document.getElementById("calendar")
const calendar = new FullCalendar.Calendar(calendarEl, {
initialView: "dayGridMonth",
headerToolbar: {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay",
},
buttonText: {
today: "Today",
month: "Month",
week: "Week",
day: "Day",
},
events: [ // Events
{
title: "All Day Event",
start: "2024-03-02",
},
{
title: "Time Event",
start: "2024-03-02 12:00:00",
},
],
// ----- 本段落新增開始 -----
eventClick: function(info) {
console.log(info.event)
Swal.fire({
icon: info.event.allDay ? "success" : "info",
title: info.event.title,
text: info.event.startStr,
confirmButtonText: "OK",
})
},
// ----- 本段落新增結束 -----
})
calendar.render()
})
</script>
<!-- sweetAlert2 origin code-->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js"></script>
<!-- fullcalendar origin code-->
<script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js'></script>
</body>
日期點擊與多選
步驟與說明
– 加入 selectable: true 讓行事曆可以被選擇
– 加入 dateClick 和 select 兩個方法
– 一樣可以看到console.log(info)得內容
注意: dateClick 有 dateStr; select則為 startStr、endStr
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- sweetAlert2 css -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.min.css" rel="stylesheet">
</head>
<body>
<!-- Calendar position -->
<div id="calendar"></div>
<script>
document.addEventListener("DOMContentLoaded", function() {
const calendarEl = document.getElementById("calendar")
const calendar = new FullCalendar.Calendar(calendarEl, {
initialView: "dayGridMonth",
headerToolbar: {
left: "prev,next today",
center: "title",
right: "dayGridMonth,timeGridWeek,timeGridDay",
},
buttonText: {
today: "Today",
month: "Month",
week: "Week",
day: "Day",
},
// ----- 本段落新增開始 -----
selectable: true,
dateClick: function(info) {
console.log(info)
Swal.fire({
icon: "success",
title: "Clicked",
text: info.dateStr,
confirmButtonText: "OK",
})
},
select: function(info) {
console.log(info)
Swal.fire({
icon: "success",
title: "Selected",
text: `${info.startStr} ~ ${info.endStr}`,
confirmButtonText: "OK",
})
}
// ----- 本段落新增結束 -----
})
calendar.render()
})
</script>
<!-- sweetAlert2 origin code-->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js"></script>
<!-- fullcalendar origin code-->
<script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js'></script>
</body>
</html>
總結
FullCalendar是目前最多人使用的網頁前端行事曆,目前提供幾個基礎的用法,希望能夠減少大家在套件官網花費的時間,其他還有很多上方未提到的功能與方法,如果需要補充或是幫忙說明都可以在下方留言讓我知道,我會在一週內回覆或email你並將你想要知道的功能補上來,祝大家開發順利。
GOOD!! 我正好在Study, 受益良多!!
很開心能幫助到你!
有空可以再補上修改或刪除的功能會更加完整歐~ :)
ok沒問題!!補上後跟你說聲
感謝分享~ 超棒!