时间条组件是用于展示不同时间内数据图表的组件,包含调整范围,播放等交互功能。它由播放轴、播放器和时间设置组件组成。

播放轴

类型 展示形态 进度
刻度形 image.png
条形 image.png

播放器

image.png

元素 展示形态 进度
播放/暂停按钮 image.pngimage.png
前进/后退按钮 image.pngimage.png
倍速调节 image.png

时间设置

元素 展示形态 备注 进度
checkbox image.png 单一时间状态播放轴变化:
image.png

整体布局

配置 形态 进度
image.png
image.png
左右 image.png

交互

事件 对象 展示形态 进度
拖拽 播放轴 拖拽选择时间范围
刻度🌟:
image.png
点击确定起点,松开确定终点。

slider型:
image.png
点击中间拖拽表示固定时间范围的拖拽,点击两端可以调整起点与终点。
倍速调节 image.png
hover 播放轴 刻度型:


slider型:
播放/暂停按钮 image.png
点击 播放/暂停按钮 image.png
倍速调节 image.png
鼠标滚轮 倍速调节 image.png

注意:还需要提供一个api来修改时间范围
image.png

使用

  1. import {Timeline} from "@antv/gui"

接口

总体接口(用户可配置的接口)

  1. export type TimeData = {
  2. date: string;
  3. [k: string]: any;
  4. };
  5. export type PlayAxisBaseCfg = {
  6. /**
  7. * @title 时间选择
  8. * @description 时间选择, 起始时间与结束时间/单一时间
  9. */
  10. selection?: [TimeData['date'], TimeData['date']] | [TimeData['date']];
  11. /**
  12. * @title 单一时间
  13. * @description 单一时间
  14. */
  15. single?: boolean;
  16. /**
  17. * @title x 坐标
  18. * @description x 坐标
  19. */
  20. x: number;
  21. /**
  22. * @title y 坐标
  23. * @description y 坐标
  24. */
  25. y: number;
  26. /**
  27. * @title 总长度
  28. * @description 整个轴组件的长度
  29. */
  30. length: number;
  31. /**
  32. * @title 刻度配置
  33. * @description 调整刻度配置,实际上刻度是一条width为0的linear型axis组件
  34. */
  35. tickCfg?: Partial<LinearCfg>;
  36. /**
  37. * @title 刻度配置
  38. * @description 调整刻度配置,实际上刻度是一条width为0的linear型axis组件
  39. */
  40. tickInterval?: number;
  41. /**
  42. * @title 时间数据
  43. * @description 时间数据,必须是均匀等间距的,在方格形的时间轴中每个数据点代表一个小方格
  44. */
  45. timeData: TimeData[];
  46. /**
  47. * @title tooltip内容
  48. * @description 自定义tooltip内容
  49. */
  50. customTooltip?: (timeData: TimeData) => string;
  51. /**
  52. * @title 变化时回调函数
  53. * @description 监听时间范围(或单一时间)变化的回调函数
  54. */
  55. onSelectionChange?: (selection: PlayAxisBaseCfg['selection']) => void;
  56. /**
  57. * @title 播放模式
  58. * @description increase 时间范围不断扩大,fixed固定平移selection
  59. */
  60. playMode?: 'increase' | 'fixed';
  61. /**
  62. * @title 播放循环
  63. * @description true循环,反之不循环
  64. */
  65. loop?: boolean;
  66. /**
  67. * @title 步距
  68. * @description 每一次移动多少个数据点
  69. */
  70. dataPerStep?: number;
  71. };
  72. export type CellAxisCfg = PlayAxisBaseCfg & {
  73. /**
  74. * @title 间隔时间
  75. * @description 每隔多少秒前进一步
  76. */
  77. interval?: number;
  78. /**
  79. * @title cell 样式
  80. * @description 格子样式
  81. */
  82. cellStyle?: MixAttrs<Partial<RectProps>>;
  83. /**
  84. * @title 背景样式
  85. * @description 背景样式
  86. */
  87. backgroundStyle?: Partial<RectProps>;
  88. /**
  89. * @title padding
  90. * @description background 的 padding
  91. */
  92. padding?: [number, number, number, number];
  93. /**
  94. * @title 格子间距
  95. * @description 格子间的间距
  96. */
  97. cellGap?: number;
  98. };
  99. export type SliderAxisCfg = PlayAxisBaseCfg & {
  100. /**
  101. * @title delay
  102. * @description 动画停顿(ms)
  103. */
  104. delay?: number;
  105. /**
  106. * @title duration
  107. * @description 动画过渡(ms)
  108. */
  109. duration?: number;
  110. /**
  111. * @title 手柄样式
  112. * @description 手柄样式
  113. */
  114. handleStyle?: CircleProps;
  115. /**
  116. * @title 背景样式
  117. * @description 背景样式
  118. */
  119. backgroundStyle?: Partial<Omit<RectProps, 'width' | 'x' | 'y'>>;
  120. /**
  121. * @title selection样式
  122. * @description 选中时间范围样式
  123. */
  124. selectionStyle?: Partial<Omit<RectProps, 'width' | 'x' | 'y'>>;
  125. };
  126. export type CellAxisOptions = DisplayObjectConfig<CellAxisCfg>;
  127. export type SliderAxisOptions = DisplayObjectConfig<SliderAxisCfg>;
  128. type TicksOptions = LinearOptions;
  129. type SingleModeControl = false | CheckboxOptions;
  130. type Orient = {
  131. layout: 'row' | 'col';
  132. controlButtonAlign: 'normal' | 'left' | 'right';
  133. };
  134. export type SpeedControlCfg = {
  135. /**
  136. * @title 可调节的速度
  137. * @description 配置可调节的速度,建议配置范围在 5 个区间,如: [1.0, 2.0, 3.0, 4.0, 5.0], [0.5, 1.0, 1.5, 2.0, 2.5]
  138. */
  139. speeds?: number[];
  140. /**
  141. * @title 速度变化回调函数
  142. * @description 监听速度变化的回调函数
  143. */
  144. onSpeedChange?: (speedIdx: number) => void;
  145. /**
  146. * @title x
  147. * @description x坐标
  148. */
  149. x?: number;
  150. /**
  151. * @title y
  152. * @description y坐标
  153. */
  154. y?: number;
  155. /**
  156. * @title width
  157. * @description 宽度
  158. */
  159. width?: number;
  160. /**
  161. * @title height
  162. * @description 高
  163. */
  164. height?: number;
  165. /**
  166. * @title label
  167. * @description label配置
  168. */
  169. label?: Omit<TextCfg, 'text' | 'width'>;
  170. /**
  171. * @title spacing
  172. * @description label与按钮的间隔
  173. */
  174. spacing?: number;
  175. /**
  176. * @title currentSpeed
  177. * @description 当前选择的时间下标
  178. */
  179. currentSpeedIdx?: number;
  180. };
  181. export type SpeedControlOptions = DisplayObjectConfig<SpeedControlCfg>;
  182. type Controls =
  183. | false
  184. | {
  185. /**
  186. * @title 是否显示单一时间checkbox
  187. * @description false 不显示,否则应传入checkbox参数
  188. */
  189. singleModeControl?: SingleModeControl | false;
  190. /**
  191. * @title 播放器按钮,包含:play button,prev button and next button
  192. * @description 播放器按钮设置。设置为 null 时,不展示播放器按钮
  193. */
  194. controlButton?: {
  195. // /**
  196. // * @title 停止按钮
  197. // * @description 播放按钮设置。设置为 null 时,不展示播放按钮
  198. // */
  199. // stopBtn?: ButtonCfg;
  200. /**
  201. * @title 播放按钮
  202. * @description 播放按钮设置。设置为 null 时,不展示播放按钮
  203. */
  204. playBtn?: Omit<ButtonCfg, 'onClick'> | false;
  205. /**
  206. * @title 后退按钮
  207. * @description 后退按钮设置。设置为 null 时,不展示后退按钮
  208. */
  209. prevBtn?: Omit<ButtonCfg, 'onClick'> | false;
  210. /**
  211. * @title 前进按钮
  212. * @description 前进按钮设置。设置为 null 时,不展示前进按钮
  213. */
  214. nextBtn?: Omit<ButtonCfg, 'onClick'> | false;
  215. };
  216. /**
  217. * @title 倍速调节器
  218. * @description 倍速调节器设置。设置为 null 时,不展示倍速调节器
  219. */
  220. speedControl?: Omit<SpeedControlCfg, 'onSpeedChange'> | false;
  221. };
  222. export type TimelineCfg = {
  223. /**
  224. * @title x 坐标
  225. * @description x 坐标
  226. */
  227. x: number;
  228. /**
  229. * @title y 坐标
  230. * @description y 坐标
  231. */
  232. y: number;
  233. /**
  234. * @title 总宽度
  235. * @description 整个组件的宽度
  236. */
  237. width: number;
  238. /**
  239. * @title 高度
  240. * @description 整个组件的高度
  241. */
  242. height: number;
  243. /**
  244. * @title 时间数据
  245. * @description 时间数据,必须是均匀等间距的,每个数据点代表一个小方格
  246. */
  247. data: TimeData[];
  248. /**
  249. * @title 布局方向
  250. * @description 布局方向,见设计稿
  251. * @default 'left'
  252. */
  253. orient?: Orient;
  254. /**
  255. * @title 播放轴类型
  256. * @description 播放轴为slider型还是格子刻度型
  257. * @default 'slider'
  258. */
  259. type?: 'slider' | 'cell';
  260. /**
  261. * @title 播放轴cell类型配置
  262. * @description 播放轴为格子刻度型的配置,如果type不是cell则忽略
  263. */
  264. cellAxisCfg?: Omit<CellAxisCfg, 'onSelectionChange' | 'x' | 'y' | 'length' | 'timeData' | 'single'>;
  265. /**
  266. * @title 播放轴slider类型配置
  267. * @description 播放轴为格子刻度型的配置,如果type不是cell则忽略
  268. */
  269. sliderAxisCfg?: Omit<SliderAxisCfg, 'onSelectionChange' | 'x' | 'y' | 'length' | 'timeData' | 'single'>;
  270. /**
  271. * @title 播放控制
  272. * @description 配置播放器、单一时间checkbox
  273. * @default 'slider'
  274. */
  275. controls?: false | Controls;
  276. /**
  277. * @title tooltip内容
  278. * @description 自定义tooltip内容
  279. */
  280. customTooltip?: (timeData: TimeData) => string;
  281. /**
  282. * @title 刻度尺
  283. * @description 自定义刻度尺
  284. */
  285. ticks?: false | Partial<TicksOptions>;
  286. /**
  287. * @title 变化时回调函数
  288. * @description 监听时间范围(或单一时间)变化的回调函数
  289. */
  290. onSelectionChange?: PlayAxisBaseCfg['onSelectionChange'];
  291. /**
  292. * @title 播放时回调函数
  293. * @description 监听播放的回调函数
  294. */
  295. onPlay?: () => void;
  296. /**
  297. * @title 停止时回调函数
  298. * @description 监听停止回调函数
  299. */
  300. onStop?: () => void;
  301. /**
  302. * @title 后退按钮点击回调函数
  303. * @description 监听后退的回调函数
  304. */
  305. onBackward?: () => void;
  306. /**
  307. * @title 前进按钮点击回调函数
  308. * @description 监听前进的回调函数
  309. */
  310. onForward?: () => void;
  311. /**
  312. * @title 速度变化回调函数
  313. * @description 监听速度变化的回调函数
  314. */
  315. onSpeedChange?: (speed: number) => void;
  316. /**
  317. * @title 单一时间设置变化回调函数
  318. * @description 监听单一时间设置的回调函数
  319. */
  320. onSingleTimeChange?: (value: boolean) => void;
  321. /**
  322. * @title 一倍速设置
  323. * @description 一秒多少个数据点
  324. */
  325. dataPerStep?: number;
  326. /**
  327. * @title 几倍速
  328. * @description 几倍速,透传给speedcontrol
  329. */
  330. speed?: number;
  331. /**
  332. * @title 播放模式
  333. * @description increase 时间范围不断扩大,fixed固定平移selection
  334. */
  335. playMode?: 'increase' | 'fixed';
  336. /**
  337. * @title 播放循环
  338. * @description true循环,反之不循环
  339. */
  340. loop?: boolean;
  341. /**
  342. * @title 单一时间
  343. * @description true为单一时间,false为时间范围
  344. */
  345. single?: boolean;
  346. };
  347. export type TimelineOptions = DisplayObjectConfig<TimelineCfg>;

内部组件接口(不暴露给用户)

单一时间设置

就是checkbox组件的配置接口:

  1. export type CheckboxCfg = {
  2. /**
  3. * @title x 坐标
  4. * @description 局部坐标系下 x 轴坐标
  5. */
  6. x?: number;
  7. /**
  8. * @title y 坐标
  9. * @description 局部坐标系下 y 轴坐标
  10. */
  11. y?: number;
  12. /**
  13. * @title 是否选中
  14. * @description 指定当前是否选中
  15. */
  16. checked?: boolean;
  17. /**
  18. * @title 是否禁用
  19. * @description 指定当前是否禁用
  20. */
  21. disabled?: boolean;
  22. /**
  23. * @title label chebox 间距
  24. * @description label 与 chebox 的方块的间距
  25. * @default 2
  26. */
  27. spacing?: number;
  28. /**
  29. * @title 初始是否选中
  30. * @description 指定组件的初始状态,是否选中
  31. * @default true
  32. */
  33. defaultChecked?: boolean;
  34. /**
  35. * @title 样式
  36. * @description 可设置组件的默认样式(default),选中样式(selected)以及禁用样式(disabled)
  37. */
  38. label?: LabelProps;
  39. /**
  40. * @title checkbox 的方块样式
  41. * @description checkbox 的方块样式
  42. */
  43. style?: MixAttrs<Partial<RectProps>>;
  44. /**
  45. * @title 变化时回调函数
  46. * @description 变化时回调函数
  47. */
  48. onChange?: (checked: boolean) => void;
  49. };
  50. export type CheckboxOptions = DisplayObjectConfig<CheckboxCfg>;

播放/暂停按钮、前进按钮、后退按钮

可拆成三个按钮,配置接口与按钮一致

倍速调节

  1. exexport type SpeedControlCfg = {
  2. /**
  3. * @title 可调节的速度
  4. * @description 配置可调节的速度,建议配置范围在 5 个区间,如: [1.0, 2.0, 3.0, 4.0, 5.0], [0.5, 1.0, 1.5, 2.0, 2.5]
  5. */
  6. speeds?: number[];
  7. /**
  8. * @title 速度变化回调函数
  9. * @description 监听速度变化的回调函数
  10. */
  11. onSpeedChange?: (speedIdx: number) => void;
  12. /**
  13. * @title x
  14. * @description x坐标
  15. */
  16. x?: number;
  17. /**
  18. * @title y
  19. * @description y坐标
  20. */
  21. y?: number;
  22. /**
  23. * @title width
  24. * @description 宽度
  25. */
  26. width?: number;
  27. /**
  28. * @title height
  29. * @description 高
  30. */
  31. height?: number;
  32. /**
  33. * @title label
  34. * @description label配置
  35. */
  36. label?: Omit<TextCfg, 'text' | 'width'>;
  37. /**
  38. * @title spacing
  39. * @description label与按钮的间隔
  40. */
  41. spacing?: number;
  42. /**
  43. * @title currentSpeed
  44. * @description 当前选择的时间下标
  45. */
  46. currentSpeedIdx?: number;
  47. };

播放轴

  1. export type PlayAxisBaseCfg = {
  2. /**
  3. * @title 时间选择
  4. * @description 时间选择, 起始时间与结束时间/单一时间
  5. */
  6. selection?: [TimeData['date'], TimeData['date']] | [TimeData['date']];
  7. /**
  8. * @title 单一时间
  9. * @description 单一时间
  10. */
  11. single?: boolean;
  12. /**
  13. * @title x 坐标
  14. * @description x 坐标
  15. */
  16. x: number;
  17. /**
  18. * @title y 坐标
  19. * @description y 坐标
  20. */
  21. y: number;
  22. /**
  23. * @title 总长度
  24. * @description 整个轴组件的长度
  25. */
  26. length: number;
  27. /**
  28. * @title 刻度配置
  29. * @description 调整刻度配置,实际上刻度是一条width为0的linear型axis组件
  30. */
  31. tickCfg?: Partial<LinearCfg>;
  32. /**
  33. * @title 刻度配置
  34. * @description 调整刻度配置,实际上刻度是一条width为0的linear型axis组件
  35. */
  36. tickInterval?: number;
  37. /**
  38. * @title 时间数据
  39. * @description 时间数据,必须是均匀等间距的,在方格形的时间轴中每个数据点代表一个小方格
  40. */
  41. timeData: TimeData[];
  42. /**
  43. * @title tooltip内容
  44. * @description 自定义tooltip内容
  45. */
  46. customTooltip?: (timeData: TimeData) => string;
  47. /**
  48. * @title 变化时回调函数
  49. * @description 监听时间范围(或单一时间)变化的回调函数
  50. */
  51. onSelectionChange?: (selection: PlayAxisBaseCfg['selection']) => void;
  52. /**
  53. * @title 播放模式
  54. * @description increase 时间范围不断扩大,fixed固定平移selection
  55. */
  56. playMode?: 'increase' | 'fixed';
  57. /**
  58. * @title 播放循环
  59. * @description true循环,反之不循环
  60. */
  61. loop?: boolean;
  62. /**
  63. * @title 步距
  64. * @description 每一次移动多少个数据点
  65. */
  66. dataPerStep?: number;
  67. };
  68. export type CellAxisCfg = PlayAxisBaseCfg & {
  69. /**
  70. * @title 间隔时间
  71. * @description 每隔多少秒前进一步
  72. */
  73. interval?: number;
  74. /**
  75. * @title cell 样式
  76. * @description 格子样式
  77. */
  78. cellStyle?: MixAttrs<Partial<RectProps>>;
  79. /**
  80. * @title 背景样式
  81. * @description 背景样式
  82. */
  83. backgroundStyle?: Partial<RectProps>;
  84. /**
  85. * @title padding
  86. * @description background 的 padding
  87. */
  88. padding?: [number, number, number, number];
  89. /**
  90. * @title 格子间距
  91. * @description 格子间的间距
  92. */
  93. cellGap?: number;
  94. };
  95. export type SliderAxisCfg = PlayAxisBaseCfg & {
  96. /**
  97. * @title delay
  98. * @description 动画停顿(ms)
  99. */
  100. delay?: number;
  101. /**
  102. * @title duration
  103. * @description 动画过渡(ms)
  104. */
  105. duration?: number;
  106. /**
  107. * @title 手柄样式
  108. * @description 手柄样式
  109. */
  110. handleStyle?: CircleProps;
  111. /**
  112. * @title 背景样式
  113. * @description 背景样式
  114. */
  115. backgroundStyle?: Partial<Omit<RectProps, 'width' | 'x' | 'y'>>;
  116. /**
  117. * @title selection样式
  118. * @description 选中时间范围样式
  119. */
  120. selectionStyle?: Partial<Omit<RectProps, 'width' | 'x' | 'y'>>;
  121. };

预计时间

模块 备注 排期 进度
整体设计
已完成
UI 层
- 播放条
- 时间刻度
- 播放器
4d(2.28-3.3) 进行中
交互 & 事件
- hover 展示 tooltip
- 刷选区间
- 播放器前进、后退
- checkbox 单一时间
- 播放速度控制
- ….
4d(3.4-3.10) 进行中
整体串联 3d(3.11-3.15) 进行中