FullCalendar 是一个强大的日历插件,支持多种视图,包括日历视图、时间视图、列表视图等。它还支持事件管理、拖拽、缩放等功能。本文将详细介绍 FullCalendar 的使用方法。
- 丰富的API,可以满足各种需求
- 支持多种视图,如月视图、周视图、日视图等
- 支持多种插件,如时间轴、拖拽、弹出框等
- 支持多种事件,如事件拖拽、事件缩放、事件点击等
- 支持多种交互,如事件编辑、事件删除、事件添加等
- 支持多种主题,如Bootstrap、Material Design等
- 支持多种语言,如中文、英文、日文等
1. 安装
npm install fullcalendar
2. 引入
import FullCalendar from '@fullcalendar/react'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'
3. 使用
<FullCalendar
plugins={[dayGridPlugin, interactionPlugin]}
/>
4. 配置
<FullCalendar
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}
}}
5. FullCalendar常用插件
名称 | 说明 |
croe | 核心插件 |
iteraction | 交互插件 |
daygrid | 日历视图插件 |
timegrid | 时间视图插件 |
list | 列表视插件 |
multimount | 多视图插件 |
scrollgrid | 滚动视图插件 |
timeline | 时间线视图插件 |
react | React插件 |
vue | Vue插件 |
vue3 | Vue3插件 |
angular | Angular插件 |
6. FullCalendar常用属性
名称 | 说明 |
plugins | 插件列表 |
initialView | 初始视图 |
headerToolbar | 头部工具栏 |
events | 事件列表 |
eventClick | 事件点击事件 |
eventDidMount | 事件挂载事件 |
eventMouseEnter | 事件鼠标进入事件 |
eventMouseLeave | 事件鼠标离开事件 |
eventDragStart | 事件拖拽开始事件 |
7. FullCalendar常用方法
名称 | 说明 |
getApi | 获取FullCalendar实例 |
prev | 上一视图 |
next | 下一视图 |
today | 回到今天 |
changeView | 切换视图 |
addEventSource | 添加事件源 |
removeEventSource | 移除事件源 |
rerenderEvents | 重新渲染事件 |
8. FullCalendar常用API方法
8.1. 基本使用
import FullCalendar from '@fullcalendar/react'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'
const events = [
{
title: '事件1',
start: '2021-01-01',
end: '2021-01-02'
},
{
title: '事件2',
start: '2021-01-03',
end: '2021-01-04'
}
]
const handleEventClick = (info) => {
console.log(info.event.title)
}
const handleEventDidMount = (info) => {
console.log(info.event.title)
}
const handleEventMouseEnter = (info) => {
console.log(info.event.title)
}
const handleEventMouseLeave = (info) => {
console.log(info.event.title)
}
const handleEventDragStart = (info) => {
console.log(info.event.title)
}
<FullCalendar
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
events={events}
eventClick={handleEventClick}
eventDidMount={handleEventDidMount}
}
eventMouseEnter={handleEventMouseEnter}
eventMouseLeave={handleEventMouseLeave}
eventDragStart={handleEventDragStart}
/>
8.2 跳转下个月/周/日
const calendarRef = useRef(null)
const handleNext = () => {
calendarRef.current.getApi().next()
}
return (
<div>
<button onClick={handleNext}>下一月</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.3 跳转上个月/周/日
const calendarRef = useRef(null)
const handlePrev = () => {
calendarRef.current.getApi().prev()
}
return (
<div>
<button onClick={handlePrev}>上一月</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.4 跳转到今天
const calendarRef = useRef(null)
const handleToday = () => {
calendarRef.current.getApi().today()
}
return (
<div>
<button onClick={handleToday}>回到今天</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.5 跳转到指定日期
const calendarRef = useRef(null)
const handleGoTo = () => {
calendarRef.current.getApi().gotoDate('2021-01-01'); // 日期格式为 'YYYY-MM-DD'
}
return (
<div>
<button onClick={handleGoTo}>跳转到指定日期</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{s
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.6 获取当前视图起始日期和结束日期
const calendarRef = useRef(null)
const handleGetDates = () => {
const api = calendarRef.current.getApi()
const start = api.view.currentStart
const end = api.view.currentEnd
console.log(start, end)
}
return (
<div>
<button onClick={handleGetDates}>获取当前视图起始日期和结束日期</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}
}}
/>
</div>
)
8.7 获取当前视图类型
const calendarRef = useRef(null)
const handleGetViewType = () => {
const api = calendarRef.current.getApi()
const viewType = api.view.type
console.log(viewType) // 例如:dayGridMonth, timeGridWeek, timeGridDay
}
return (
<div>
<button onClick={handleGetViewType}>获取当前视图类型</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.8 获取当前视图的参数
const calendarRef = useRef(null)
const handleGetViewOptions = () => {
const api = calendarRef.current.getApi()
const viewOptions = api.view
console.log(viewOptions)
}
return (
<div>
<button onClick={handleGetViewOptions}>获取当前视图的参数</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.9 获取当前视图所有事件
const calendarRef = useRef(null)
const handleGetEvents = () => {
const api = calendarRef.current.getApi()
const events = api.getEvents()
console.log(events)
}
return (
<div>
<button onClick={handleGetEvents}>获取当前视图所有事件</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}
}}
/>
</div>
)
8.10 添加事件
const calendarRef = useRef(null)
const handleAddEvent = () => {
const api = calendarRef.current.getApi()
api.addEvent({
title: '新事件',
start: '2021-01-01',
end: '2021-01-02',
allDay: true
})
}
return (
<div>
<button onClick={handleAddEvent}>添加事件</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.11 删除事件
const calendarRef = useRef(null)
const handleDeleteEvent = () => {
const api = calendarRef.current.getApi()
const events = api.getEvents()
if (events.length > 0) {
events[0].remove()
}
}
return (
<div>
<button onClick={handleDeleteEvent}>删除事件</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.12 更新事件
const calendarRef = useRef(null)
const handleUpdateEvent = () => {
const api = calendarRef.current.getApi()
const events = api.getEvents()
if (events.length > 0) {
events[0].setDates('2021-01-02', '2021-01-03')
}
}
return (
<div>
<button onClick={handleUpdateEvent}>更新事件</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.13 修改事件属性 如颜色等
const calendarRef = useRef(null)
const handleUpdateEventColor = () => {
const api = calendarRef.current.getApi()
const events = api.getEvents()
if (events.length > 0) {
events[0].setProp('backgroundColor', 'red')
}
}
return (
<div>
<button onClick={handleUpdateEventColor}>修改事件颜色</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
/>
</div>
)
8.14 自定义prev、next、 today按钮等 customButtons
const calendarRef = useRef(null)
const handleCustomButtons = () => {
const api = calendarRef.current.getApi()
api.addEvent({
title: '新事件',
start: '2021-01-01',
end: '2021-01-02',
allDay: true
})
}
return (
<div>
<button onClick={handleCustomButtons}>自定义prev、next、 today按钮等</button>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'myPrev,MyNext MyToday myCustomButton',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
customButtons={{
myCustomButton: {
text: '自定义按钮',
icon: 'fa fa-plus',
click: function () {
alert('自定义按钮被点击了')
}
},
myToday: {
text: '今天',
icon: 'fa fa-calendar',
click: function () {
alert('今天被点击了')
}
},
myPrev: {
text: '上个月',
icon: 'fa fa-chevron-left',
click: function () {
alert('上个月被点击了')
}
},
myNext: {
text: '下个月',
icon: 'fa fa-chevron-right',
click: function () {
alert('下个月被点击了')
}
}}
}}
/>
</div>
)
8.15 配置 calendarOptions 单元格slotDuration属性
const calendarRef = useRef(null)
return (
<div>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
slotDuration="00:30:00"
/>
</div>
)
8.16 FullCalendar组件 国际化
const calendarRef = useRef(null)
return (
<div>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
locale="zh-cn"
/>
</div>
)
8.17 FullCalendar组件 eventDrop事件
const calendarRef = useRef(null)
const handleEventDrop = (info) => {
console.log(info)
}
const handleEventResize = (info) => {
console.log(info)
}
const handleEventClick = (info) => {
console.log(info)
}
return (
<div>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
eventDrop={handleEventDrop}
eventResize={handleEventResize}
eventClick={handleEventClick}
/>
</div>
)
8.18 FullCalendar组件 鼠标事件
const calendarRef = useRef(null)
const handleEventMouseEnter = (info) => {
console.log(info)
}
const handleEventMouseLeave = (info) => {
console.log(info)
}
return (
<div>
<FullCalendar
ref={calendarRef}
plugins={[dayGridPlugin, interactionPlugin]}
initialView="dayGridMonth"
headerToolbar={{
start: 'prev,next today',
center: 'title',
end: 'dayGridMonth,timeGridWeek,timeGridDay'
}}
eventMouseEnter={handleEventMouseEnter}
eventMouseLeave={handleEventMouseLeave}
/>
</div>
)
原文链接:https://code.ifrontend.net/archives/316,转载请注明出处。
评论0