为何 FullCalendar 号称前端最强日历组件?

boyanx3个月前技术教程19

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

1.什么是 FullCalendar

FullCalendar 是一个用于创建日历界面的 JavaScript 开源库,支持全尺寸拖放(Full-sized drag & drop),同时具有适用于 React 和许多其他框架的适配器,比如:React、Vue、Angular 、Web Component等以及一流的 TypeScript 支持。

FullCalendar 目前非常受欢迎 ,除了易于使用之外还具有许多内置功能和用于充分定制的插件,而官方提供的插件数量已经达到了 25+。

目前 FullCalendar 在 Github 上通过 MIT 协议开源,有超过 17.3k 的 star、3.6k 的 fork、项目依赖量 63.8k、代码贡献者 100+、妥妥的前端优质开源项目。

2.为什么要 FullCalendar

2.1 不同视图支持

FullCalendar 库提供各种日历视图,例如:每月、每周和每天,还具有 TimeGrid 、 DayGrid 、TimeLine、Multi-Month Stack 等等视图模式,同时允许自定义视图,非常适合构建日程安排界面。

比如下面的代码设置了视图模式为 dayGridMonth:

import { Calendar } from '@fullcalendar/core';
import dayGridPlugin from '@fullcalendar/daygrid';

const calendar = new Calendar(calendarEl, {
  plugins: [dayGridPlugin],
  initialView: 'dayGridMonth',
});

页面渲染视图如下:

2.2 丰富的插件系统

FullCalendar 具有多种用于添加额外功能的插件。

插件系统很有用,因为开发者不需要下载整个代码库,但可以选择要包含的插件。 这样做可以缩小代码库的大小,并使管理依赖项变得更容易。

一些主流的插件包括:

  • @fullcalendar/interaction:提供点击、触摸、拖动交互。
  • @fullcalendar/daygrid:提供每月、每日和每周的日历视图。
  • @fullcalendar/timegrid:提供时间网格视图。
  • @fullcalendar/list:提供简化的列表视图。
  • @fullcalendar/vue3:支持 Vue3
  • @fullcalendar/vue:支持 Vue2
  • @fullcalendar/angular:支持 Angular 组件
  • @fullcalendar/react:支持 React 组件

下面是在 Vue3 中使用 FullCalendar 的代码示例:

<script>
import FullCalendar from '@fullcalendar/vue3'
import dayGridPlugin from '@fullcalendar/daygrid'
import interactionPlugin from '@fullcalendar/interaction'
export default {
  components: {
    FullCalendar
     // make the <FullCalendar> tag available
  },
  data() {
    return {
      calendarOptions: {
        plugins: [ dayGridPlugin, interactionPlugin ],
        initialView: 'dayGridMonth'
      }
    }
  }
}
</script>
<template>
  <FullCalendar :options="calendarOptions" />
</template>

3.使用 FullCalendar

3.1 基础用法

首先,需要安装核心 npm 包:

yarn add @fullcalendar/daygrid @fullcalendar/react

接下来,添加 FullCalendar 组件并包含日期网格插件:

import FullCalendar from '@fullcalendar/react';
import daygridPlugin from '@fullcalendar/daygrid';

export const MyCalendar = () => {
  return (
    <div>
      <FullCalendar plugins={[daygridPlugin]} />
    </div>
  );
};

下面是设置以后的基础视图:

接下来可以自定义顶部工具栏并添加每周和每日视图。 FullCalendar 提供了 headerToolbar 属性,开发者可以使用它来选择想要查看的控件:

<FullCalendar
  headerToolbar={{
    start: 'today prev next',
    end: 'dayGridMonth dayGridWeek dayGridDay',
  }}
  plugins={[daygridPlugin]}
  views={['dayGridMonth', 'dayGridWeek', 'dayGridDay']}
/>

headerToolbar 对象接受 start, center、end 字段 , 每个字段都必须是可以包含标题、上一个、下一个、上一年、下一年、今天和日历视图名称(如 dayGridMonth)的字符串。

开发者可以按照想要的任何顺序排列这些字段,FullCalendar 将正确的渲染。

3.2 添加事件交互

为了给日历组件添加交互,需要首先添加 @fullcalendar/interaction 插件:

yarn add @fullcalendar/interaction

同时需要将 editable 和 selectable 属性设置为 true 并将事件处理程序放置在 events 属性中。

import FullCalendar from '@fullcalendar/react';
import daygridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
import { useState } from 'react';
import { v4 as uuid } from 'uuid';

export const MyCalendar = () => {
  const [events, setEvents] = useState([]);

  const handleSelect = (info) => {
    const { start, end } = info;
    const eventNamePrompt = prompt('Enter, event name');
    if (eventNamePrompt) {
      setEvents([
        ...events,
        {
          start,
          end,
          title: eventNamePrompt,
          id: uuid(),
        },
      ]);
    }
  };

  return (
    <div>
      <FullCalendar
        editable
        selectable
        events={events}
        // 事件处理
        select={handleSelect}
        headerToolbar={{
          start: 'today prev next',
          end: 'dayGridMonth dayGridWeek dayGridDay',
        }}
        plugins={[daygridPlugin, interactionPlugin]}
        views={['dayGridMonth', 'dayGridWeek', 'dayGridDay']}
      />
    </div>
  );
};

以上代码首先添加了一个 handleSelect 回调,其接受 info 对象作为参数,该对象包含有关用户选择日期的信息。

Prompt() 函数向用户询问事件标题并创建一个包含开始、结束、标题和 ID 的新事件。而 id 属性需要是唯一的字符串,而这里引入了 uuid 三方库。

要添加编辑事件,可以遵循与上面类似的模式,只需要使用 eventClick 属性,而拖放操作则可以使用 eventChange 。

参考资料

https://github.com/fullcalendar/fullcalendar

https://isamatov.com/react-fullcalendar-tutorial/

https://fullcalendar.io/docs/plugin-index

https://fullcalendar.io/docs/vue

https://medevel.com/os-js-calendar/

标签: js 日历插件

相关文章

不出所料的黑科技,OS X Yosemite 正式发布

今天,苹果在加州库比蒂诺总部召开了秋季新品发布会,而最新的OS X Yosemite(优胜美)也终于正式发布了,正式版比7月公开的开发版新增了10余项功能改进。发布会中宣称已有数百万人体验过测试版的Y...

学会使用vivo手机20大隐藏功能,智能升级,便捷更高效!

一、隐私与安全1. 摄像头检测:通过【i管家】检测酒店或家中WiFi连接的摄像头,保护隐私安全。2. 隐私空间双系统:在【设置-安全与隐私】中开启原子隐私系统,存放敏感文件或社交账号,需独立密码解锁。...

用 obsidian 两年多,现在我怎么同步和使用?

用 obsidian 已经两年多了,距离我上次更新《如何用 obsidian 和 flomo 搭建知识体系》已经过去一年半了,重新看了一遍以前写的内容,当时选择 obsidian 的优点,现在依然成立...

超过11.8K的Star。一个强大且灵活的开源日历库——tui.calendar

如今很多Web应用程序中,对日历和日程管理功能的需求非常重视和需要。无论你是项目管理、个人日常安排,还是企业级的时间管理系统,一个高效、可定制的日历库插件显得尤为重要,今天给大家推荐一个功能强大且灵活...

几款自用Obsidian插件分享!(obsidian第三方插件)

沙牛提示阅读本文需要 4 分钟,分享几款自用的 Obsidian 插件!建议收藏本文,以便随时观看学习!00 前言作为我唯一的深度知识管理工具,我将自己输出的所有内容,都放到 Obsidian 中进行...

如果你喜欢一个人,就给TA飞书(如果我喜欢一个人我会送他两本书)

作者:刘伟宏 行业:互联网每次看见字节圈男男女女嘤嘤嘤哭诉找对象困难,或者暗搓搓的匿名表白某个小姐姐小哥哥,我就深刻不解。莫非大家都没有发现“飞书”是拉近距离、培养感情的神器?喜欢谁,就给谁飞书呀!“...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。