FullCalendar简单的应用(新增,拖动,编辑事件)

大概效果: 

以 react 为例:

日历组件所需依赖: (Plugin Index - Docs | FullCalendar)

    "@fullcalendar/core": "^6.1.10",

    "@fullcalendar/daygrid": "^6.1.10",

    "@fullcalendar/interaction": "^6.1.10",

    "@fullcalendar/react": "^6.1.10",

安装以上依赖

npm install @fullcalendar/core @fullcalendar/daygrid  @fullcalendar/interaction @fullcalendar/react

引入依赖

import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';// 日历格子显示
import interactionPlugin from '@fullcalendar/interaction'; // 拖拽插件
import locale from '@fullcalendar/core/locales/zh-cn';// 中文import { Form, Input, Modal } from 'antd';
import React, { Component } from 'react';
     <FullCalendarref='fullcalendar'locale={locale} // 中文插件headerToolbar={{left: '',center: 'prev,title,next',right: '',}}dayHeaderFormat={(date, index) => {// 自定义 日历表头 周日 周一 可以改成其他的const week = Moment(date.date.marker).format('ddd');return week;}}firstDay={0} // 每周周几为开始日0周日 1周一 以此类推editable // false之后不可以拖拽selectablescrollweekMode='liquid'plugins={[dayGridPlugin, interactionPlugin]}initialView='dayGridMonth'showNonCurrentDates={false}eventContent={this.renderEventContent}dateClick={(info) => {// 单击某个日期this.showModal(info, 'date');this.setState({ selectDate: info.dateStr });}}select={(info) => {// 托选某几个日期this.showModal(info, 'range');}}eventClick={(info) => {// 事件被点击this.setState({isModalOpen: true,items: info.event.title,modalMsg: {id: info.event.id,allDay: info.event.allDay,startStr: info.event.startStr,endStr: info.event.endStr,dateStr: info.event.startStr,type: info.event.extendedProps.type,},});console.log(this.state.eventList);}}eventDrop={(eventDropInfo) => {// 事件被拖拽const { eventList,   } = this.state;if (eventDropInfo.event.id) {const eventListTemp = eventList.map((e) => {if (e.id === eventDropInfo.event.id) {return {...e,start: eventDropInfo.event.startStr,end: eventDropInfo.event.endStr,};}return e;});this.setState({eventList: eventListTemp,});}}}eventResize={(eventResizeInfo) => {// 事件变化 缩短或者 拉长了时间const { eventList } = this.state;if (eventResizeInfo.event.id) {const eventListTemp = eventList.map((e) => {if (e.id === eventResizeInfo.event.id) {return {...e,start: eventResizeInfo.event.startStr,end: eventResizeInfo.event.endStr,};}return e;});console.log(eventListTemp,'eventListTemp');this.setState({eventList: eventListTemp,});}}}events={this.state.eventList}/>

 新增事件的模态框:(根据需求自定义)

        <Modal title='添加日历事项' visible={this.state.isModalOpen} onOk={this.handleOk} onCancel={this.handleCancel}><p>选中时间: {this.state.modalMsg.dateStr}{this.state.modalMsg.endStr ? '~' + this.state.modalMsg.endStr : ''}</p><InputaddonBefore='添加日期事项'defaultValue='活动1'value={this.state.items}onChange={(e) => {this.setState({ items: e.target.value });}}/></Modal>

使用的事件:

 this.state = {eventList: [],isModalOpen: false,modalMsg: { type: 'date' },items: '',};

dateClick、select 事件打开模态框  (传入事件等等参数)

  showModal = (info, type) => {this.setState({ isModalOpen: true, modalMsg: { ...info, dateStr: info.startStr || info.dateStr, type } });};
事件模态框点击确定
  handleOk = () => {const { eventList, modalMsg, items } = this.state;console.log(modalMsg);if (modalMsg.id) {const eventListTemp = eventList.map((e) => {if (e.id === modalMsg.id) {return { ...e, title: items };}return e;});this.setState({eventList: eventListTemp,});} else {if (modalMsg.type === 'range') {this.setState({eventList: [...eventList,{id: random(),title: items,start: modalMsg.startStr,end: modalMsg.endStr,allDay: true,type: modalMsg.type,},],});} else {this.setState({eventList: [...eventList,{title: items,start: modalMsg.dateStr,allDay: true,id: random(),type: modalMsg.type,},],});}}console.log('eventList', this.state.eventList);this.setState({ isModalOpen: false, items: '', modalMsg: { type: 'date' } });};

模态框点击取消
 

  handleCancel = () => {this.setState({ isModalOpen: false, items: '', modalMsg: { type: 'date' } });};

 使用的属性解析:  

【locale】(Locale - Docs | FullCalendar)

选项用于定义本地化设置,以便使日历适应不同的语言和地区

  1. 英语(美国)'en''en-us'
  2. 中文(简体中文)'zh''zh-cn'
  3. 法语'fr''fr-fr'
  4. 德语'de''de-de'
  5. 西班牙语(西班牙)'es''es-es'
  6. 日语'ja''ja-jp'
  7. 俄语'ru''ru-ru'
  8. 阿拉伯语'ar''ar-sa'

【headerToolbar】

如果设置为false,则不显示头部信息。

  1. left: 左侧区域的按钮和标题配置。
  2. center: 中间区域的按钮和标题配置。
  3. right: 右侧区域的按钮和标题配置。

每个区域的配置可以包含以下属性:

  • prev: 切换到上一个日期或视图的按钮。
  • next: 切换到下一个日期或视图的按钮。
  • today: 切换到当前日期的按钮。
  • title: 显示当前日期范围或视图名称的区域。
  • prevYear: 切换到上一年的按钮。
  • nextYear: 切换到下一年的按钮。
  • prevMonth: 切换到上个月的按钮。
  • nextMonth: 切换到下个月的按钮。
  • dayGridMonth: 切换到月视图的按钮。
  • timeGridWeek: 切换到周视图的按钮。
  • timeGridDay: 切换到天视图的按钮。
  • todayButton: 切换到今天的按钮。

【dayHeaderFormat】 

设置在天视图中每个天的列上显示的日期格式。可以自定义这些列头的文本格式,以适应你的需求。

以下是一些 dayHeaderFormat 的示例以及它们的含义:

  • 'dd':显示短格式的星期几(例如:周一、周二)。
  • 'dddd':显示完整的星期几名称(例如:星期一、星期二)。
  • 'D':显示天的数字,不带前导零(1、2、3)。
  • 'DD':显示天的数字,带前导零(01、02、03)。

也可以完全自定义

         dayHeaderFormat={(date, index) => {// 自定义 日历表头 周日 周一 可以改成其他的const week = Moment(date.date.marker).format('ddd');return week;}}

【weekMode】

在月视图里显示周的模式,因为每月周数可能不同,所以月视图高度不一定。

  • fixed:固定显示6周高,日历高度保持不变
  • liquid:不固定周数,高度随周数变化
  • variable:不固定周数,但高度固定

【initialView】

 默认为哪个视图

  • 月:dayGridMonth 
  • 周:timeGridWeek 
  • 日:timeGridDay 

 

【showNonCurrentDates】

属性为true,即非当前月份的日期会显示出来。如果将showNonCurrentDates属性设置为false,则非当前月份的日期将不会显示。 

【dateClick】 

dateClick是fullcalendar插件中的一个事件,当用户点击日历中的某个日期时触发 

          dateClick={(info) => {// 单击某个日期}}

【select】

用于表示用户选择了日期范围的操作

          select={(info) => {// 托选某几个日期this.showModal(info, 'range');}}

 【eventClick】

用于表示用户点击了事件的操作

          eventClick={(info) => {// 事件被点击}}

 【eventDrop】表示拖动事件

          eventDrop={(eventDropInfo) => {// 事件被拖拽}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新书速览|循序渐进Vue.js 3.x前端开发实战

Vue.js初学者和前端开发人员使用&#xff0c;网课、培训机构与大中专院校的教学用书 作者简介 张益珲 美国亚利桑那州立大学计算机工程技术硕士&#xff0c;架构师&#xff0c;从业近10年&#xff0c;多年大前端开发经验&#xff0c;曾就职于知名上市公司&#xff0c;主导开发…

反向代理+web集群+mysql mha实验总结

一、实验步骤 1、部署框架前准备工作 服务器类型部署组件ip地址DR1调度服务器 主&#xff08;ha01&#xff09;KeepalivedLVS-DR192.168.86.13DR2调度服务器 备 (ha02)KeepalivedLVS-DR192.168.86.14web1节点服务器 (slave01)NginxTomcatMySQL 备MHA managerMHA node192.168.8…

详解Oracle数据库的启动

Oracle数据库的启动&#xff0c;其概念可参考Overview of Instance and Database Startup。 其过程可参见下图&#xff1a; 当数据库从关闭状态进入打开数据库状态时&#xff0c;它会经历以下阶段。 阶段Mount状态描述1实例在没有挂载数据库的情况下启动实例已启动&#xff…

微信小程序如何自定义导航栏,怎么确定导航栏及状态栏的高度?导航栏被刘海、信号图标给覆盖了怎么办?

声明&#xff1a;本文为了演示效果&#xff0c;颜色采用的比较显眼&#xff0c;可根据实际情况修改颜色 问题描述 当我们在JSON中将navigationStyle设置成custom后&#xff0c;当前页面的顶部导航栏就需要我们制作了&#xff0c;但出现了一下几个问题&#xff1a; 导航栏的高…

三维猴打印PCB外壳预留板壳间距

3D文件下单那里有一个“3D模型设计规范”&#xff0c;里面详细讲了设计时要考虑打印的参数细节。如果有其他的设计规范不了解的也可以进去查看&#xff0c;里面写的很详细。 这里是打印PCB外壳预留板壳间距相关说明&#xff1a; 设计模型为装配体&#xff0c;请务必满足装配最…

SpringSecurity集成JWT实现后端认证授权保姆级教程-认证配置篇

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525;网站…

【前端】前后端的网络通信基础操作(原生ajax, axios, fetch)

概述 前后端网络请求工具 原生ajaxfetch apiaxios GET和POST请求 get只能发纯文本 post可以发不同类型的数据&#xff0c;要设置请求头&#xff0c;需要告诉服务器一些额外信息 测试服务器地址 有一些公共的测试 API 可供学习和测试用途。这些 API 允许你发送 HTTP 请求…

机器学习顶会ICML 2024今日开放投稿,CCF A类,中稿率27.94%(附ICML23杰出论文+18篇高分论文)

ICML 2024今天开放投稿了&#xff01;距离截稿还有24天&#xff0c;想冲ICML的同学速度&#xff01; ICML 全称 International Conference on Machine Learning&#xff0c;由国际机器学习学会&#xff08;IMLS&#xff09;举办&#xff0c;与NIPS一同被认为是人工智能、机器学…

Java高级流

高级流 流连接示意图 缓冲流 java.io.BufferedOutputStream和BufferedInputStream. 缓冲流是一对高级流,作用是提高读写数据的效率. 缓冲流内部有一个字节数组,默认长度是8K.缓冲流读写数据时一定是将数据的读写方式转换为块读写来保证读写效率. 使用缓冲流完成文件复制操…

GAMES101-Assignment5

一、问题总览 在这次作业中&#xff0c;要实现两个部分&#xff1a;光线的生成和光线与三角的相交。本次代码框架的工作流程为&#xff1a; 从main 函数开始。我们定义场景的参数&#xff0c;添加物体&#xff08;球体或三角形&#xff09;到场景中&#xff0c;并设置其材质&…

最新GPT4、AI绘画、DALL-E3文生图模型教程,GPT语音对话使用,ChatFile文档对话总结

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

CTF-PWN-沙箱逃脱-【seccomp和prtcl-2】

文章目录 沙箱逃脱prtcl题HITCON CTF 2017 Quals Impeccable Artifact libc 2.24flag文件对应prctl函数检查源码思路exp 沙箱逃脱prtcl题 HITCON CTF 2017 Quals Impeccable Artifact libc 2.24 flag文件 此时的flag文件在本文件夹建一个即可 此时的我设置的flag为 对应prc…