Skip to content

Commit cf1df7c

Browse files
committed
feat: ✨ onClickTimeArea event
1 parent ee4bceb commit cf1df7c

File tree

2 files changed

+15
-29
lines changed

2 files changed

+15
-29
lines changed

src/components/time_area/time_area.tsx

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1+
import { parserPixelToTime } from '@/utils/deal_data';
12
import React, { FC, useEffect, useRef } from 'react';
2-
import {
3-
AutoSizer, Grid,
4-
GridCellRenderer,
5-
OnScrollParams
6-
} from 'react-virtualized';
3+
import { AutoSizer, Grid, GridCellRenderer, OnScrollParams } from 'react-virtualized';
74
import { CommonProp } from '../../interface/common_prop';
85
import { prefix } from '../../utils/deal_class_prefix';
96
import './time_area.less';
@@ -19,18 +16,7 @@ export type TimeAreaProps = CommonProp & {
1916
};
2017

2118
/** 动画时间轴组件 */
22-
export const TimeArea: FC<TimeAreaProps> = ({
23-
setCursor,
24-
hideCursor,
25-
scale,
26-
scaleWidth,
27-
scaleCount,
28-
scaleSplitCount,
29-
startLeft,
30-
scrollLeft,
31-
onScroll,
32-
getScaleRender,
33-
}) => {
19+
export const TimeArea: FC<TimeAreaProps> = ({ setCursor, hideCursor, scale, scaleWidth, scaleCount, scaleSplitCount, startLeft, scrollLeft, onClickTimeArea, getScaleRender }) => {
3420
const gridRef = useRef<Grid>();
3521
/** 是否显示细分刻度 */
3622
const showUnit = scaleSplitCount > 0;
@@ -43,11 +29,7 @@ export const TimeArea: FC<TimeAreaProps> = ({
4329
const item = (showUnit ? columnIndex / scaleSplitCount : columnIndex) * scale;
4430
return (
4531
<div key={key} style={style} className={prefix(...classNames)}>
46-
{isShowScale && (
47-
<div className={prefix('time-unit-scale')}>
48-
{getScaleRender ? getScaleRender(item) : item}
49-
</div>
50-
)}
32+
{isShowScale && <div className={prefix('time-unit-scale')}>{getScaleRender ? getScaleRender(item) : item}</div>}
5133
</div>
5234
);
5335
};
@@ -74,9 +56,7 @@ export const TimeArea: FC<TimeAreaProps> = ({
7456
<>
7557
<Grid
7658
ref={gridRef}
77-
columnCount={
78-
showUnit ? scaleCount * scaleSplitCount : scaleCount
79-
}
59+
columnCount={showUnit ? scaleCount * scaleSplitCount : scaleCount}
8060
columnWidth={getColumnWidth}
8161
rowCount={1}
8262
rowHeight={height}
@@ -91,11 +71,13 @@ export const TimeArea: FC<TimeAreaProps> = ({
9171
style={{ width, height }}
9272
onClick={(e) => {
9373
if (hideCursor) return;
94-
const rect = (
95-
e.currentTarget as HTMLElement
96-
).getBoundingClientRect();
74+
const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();
9775
const position = e.clientX - rect.x;
98-
setCursor({ left: Math.max(position + scrollLeft, startLeft)});
76+
77+
const time = parserPixelToTime(Math.max(position + scrollLeft, startLeft), { startLeft, scale, scaleWidth });
78+
const result = onClickTimeArea && onClickTimeArea(time, e);
79+
if(result === false) return; // 返回false时阻止设置时间
80+
setCursor({ time });
9981
}}
10082
className={prefix('time-area-interact')}
10183
></div>

src/interface/timeline.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,10 @@ export interface EditData {
188188
* @description cursor拖拽事件
189189
*/
190190
onCursorDrag?: (time: number) => void;
191+
/**
192+
* @description 点击时间区域事件, 返回false时阻止设置时间
193+
*/
194+
onClickTimeArea?: (time: number, e: React.MouseEvent<HTMLDivElement, MouseEvent>) => boolean | undefined;
191195
}
192196

193197
export interface TimelineState {

0 commit comments

Comments
 (0)