日历视图

Day Flow 支持四种不同的视图类型,每种类型都针对不同的用例和用户需求进行了优化。您可以以编程方式切换视图,或者提供 UI 供用户切换视图。

可用视图

日视图

日视图专注于单个日期,并带有详细的时间槽,非常适合管理每日日程。

配置

属性类型默认值描述
showAllDaybooleantrue是否显示全天事件行。
scrollToCurrentTimebooleantrue初始加载时是否自动滚动到当前时间。
timeFormat'12h' | '24h''24h'时间轴的时间格式。
secondaryTimeZonestringundefined仅在日视图中显示的辅助参考时间轴。
import {
  useCalendarApp,
  DayFlowCalendar,
  createDayView,
  ViewType,
} from '@dayflow/react'; // or '@dayflow/vue', '@dayflow/svelte', '@dayflow/angular'

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createDayView()],
    defaultView: ViewType.DAY,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}

周视图

周视图显示一个带有时间槽的 7 天网格,显示具有准确开始和结束时间的事件。

配置

属性类型默认值描述
showWeekendsbooleantrue是否显示周六和周日。
showAllDaybooleantrue是否显示全天事件行。
startOfWeeknumber1一周的开始日期(0 为周日,1 为周一等)。
scrollToCurrentTimebooleantrue初始加载时是否自动滚动到当前时间。
timeFormat'12h' | '24h''24h'时间轴的时间格式。
secondaryTimeZonestringundefined仅在周视图中显示的辅助参考时间轴。
import {
  useCalendarApp,
  DayFlowCalendar,
  createWeekView,
  ViewType,
} from '@dayflow/react'; // or '@dayflow/vue', '@dayflow/svelte', '@dayflow/angular'

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createWeekView()],
    defaultView: ViewType.WEEK,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}

月视图

月视图显示传统的日历网格,显示一个月中的所有日期。

配置

属性类型默认值描述
showWeekNumbersbooleanfalse是否显示周数。
showMonthIndicatorbooleantrue是否在滚动时显示月份指示标题。
startOfWeeknumber1一周的开始日期(0 为周日,1 为周一等)。
snapToMonthbooleanfalse启用后,用户停止滚动时视图会自动对齐到当前主要月份的起始位置。
scrollMonthScrollConfig控制滚动锁定与月份切换动画,详见下方说明。

MonthScrollConfig

属性类型默认值描述
disabledbooleanfalse禁用连续滚动,只能通过 Prev / Next 导航按钮切换月份。
transition'fade' | undefinedundefined月份切换时的动画效果(仅在 disabled: true 时生效)。设为 'fade' 时,当前月份向左淡出,下一月份从右侧淡入;省略则保留原有的平滑滚动动画效果。
createMonthView({
  scroll: {
    disabled: true, // 锁定为单月模式,仅允许 Prev/Next 切换
    transition: 'fade', // 可选淡入淡出动画(省略则保持平滑滚动)
  },
});
import {
  useCalendarApp,
  DayFlowCalendar,
  createMonthView,
  ViewType,
} from '@dayflow/react'; // or '@dayflow/vue', '@dayflow/svelte', '@dayflow/angular'

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createMonthView()],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}

年视图

年视图提供全面的年度概览。DayFlow 的年视图支持三种模式:year-canvas(连续网格)、fixed-week(固定 52 周列)和 grid(非常适合热力图的 4x3 月份网格)。

配置

属性类型默认值描述
mode'year-canvas' | 'fixed-week' | 'grid''year-canvas'年视图的显示模式。
startOfWeeknumber1设置周起始日(0 为周日,1 为周一等)。用于 fixed-weekgrid 模式。
showTimedEventsInYearViewbooleanfalse是否在年视图中显示定时事件(圆点/指示器/热力强度)。
gridDateClick'popup' | 'day-view' | 'none' | function'popup'(Grid 模式) 点击日期单元格时的操作。
gridDateDoubleClick'day-view' | 'none' | function'day-view'(Grid 模式) 双击日期单元格时的操作。
gridPopupContentfunctionundefined(Grid 模式) 日期弹出层的自定义渲染函数。
gridHeatmapLevelsnumber5(Grid 模式) 热力图的强度层级数量。

热力图自定义 (Grid 模式)

当使用 mode: 'grid' 时,日历会根据事件数量显示热力图强度。您可以通过在全局 CSS 中覆盖以下 CSS 变量来自定义颜色:

/* 浅色模式热力图 */
.df-year-grid-month {
  --heat-1: #ebf5ff;
  --heat-2: #cfe8ff;
  --heat-3: #91d5ff;
  --heat-4: #60a5fa;
  --heat-5: #3b82f6;
}

/* 深色模式热力图 */
.dark .df-year-grid-month {
  --heat-1: #1e3a5f;
  --heat-2: #2563eb;
  --heat-3: #1e40af;
  --heat-4: #3b82f6;
  --heat-5: #93c5fd;
}

如果您将 gridHeatmapLevels 更改为不同的数字(例如 3),则应提供对应数量的变量(例如 --heat-1--heat-3)。

import {
  useCalendarApp,
  DayFlowCalendar,
  createYearView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [
      createYearView({
        mode: 'grid',
        showTimedEventsInYearView: true,
        gridHeatmapLevels: 5,
      }),
    ],
    defaultView: ViewType.YEAR,
  });

  return <DayFlowCalendar calendar={calendar} />;
}

使用多个视图

您可以注册多个视图并允许用户在它们之间切换:

import {
  useCalendarApp,
  DayFlowCalendar,
  createDayView,
  createWeekView,
  createMonthView,
  createYearView,
  ViewType,
} from '@dayflow/react'; // or '@dayflow/vue', '@dayflow/svelte', '@dayflow/angular'

function MultiViewCalendar() {
  const calendar = useCalendarApp({
    views: [
      createDayView(),
      createWeekView(),
      createMonthView(),
      createYearView(),
    ],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
    callbacks: {
      onViewChange: view => {
        console.log('View changed to:', view);
      },
    },
  });

  return (
    <div className='h-screen'>
      <DayFlowCalendar calendar={calendar} />
    </div>
  );
}

编程控制视图

切换视图

// 切换到特定视图
calendar.changeView(ViewType.WEEK);

// 获取当前视图
const currentView = calendar.app.getCurrentView();
console.log(currentView.type); // 'week'

导航

所有视图都支持相同的导航方法:

// 跳转到今天
calendar.goToToday();

// 跳转到上一个周期(取决于当前视图,可能是日/周/月/年)
calendar.goToPrevious();

// 跳转到下一个周期
calendar.goToNext();

// 选择特定日期
calendar.selectDate(new Date(2024, 9, 15));

ViewType 枚举

enum ViewType {
  DAY = 'day',
  WEEK = 'week',
  MONTH = 'month',
  YEAR = 'year',
}

On this page