Skip to content

Commit a87f839

Browse files
committed
docs: 📝 add auto scroll when play demo
1 parent cf2aeb2 commit a87f839

File tree

4 files changed

+42
-15
lines changed

4 files changed

+42
-15
lines changed

docs/engine/engine-basic/index.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,37 @@
11
import { Timeline, TimelineState } from '@xzdarcy/react-timeline-editor';
2+
import { Switch } from 'antd';
23
import { cloneDeep } from 'lodash';
34
import React, { useRef, useState } from 'react';
4-
import TimelinePlayer from './player';
55
import { CustomRender0, CustomRender1 } from './custom';
6-
import { CustomTimelineAction, CusTomTimelineRow, mockData, mockEffect } from './mock';
76
import './index.less';
7+
import { CustomTimelineAction, CusTomTimelineRow, mockData, mockEffect, scale, scaleWidth, startLeft } from './mock';
8+
import TimelinePlayer from './player';
89

910
const defaultEditorData = cloneDeep(mockData);
1011

1112
const TimelineEditor = () => {
1213
const [data, setData] = useState(defaultEditorData);
1314
const timelineState = useRef<TimelineState>();
1415
const playerPanel = useRef<HTMLDivElement>();
16+
const autoScrollWhenPlay = useRef<boolean>(true);
1517

1618
return (
1719
<div className="timeline-editor-engine">
20+
<div className="player-config">
21+
<Switch
22+
checkedChildren="开启运行时自动滚动"
23+
unCheckedChildren="禁用运行时自动滚动"
24+
defaultChecked={autoScrollWhenPlay.current}
25+
onChange={(e) => (autoScrollWhenPlay.current = e)}
26+
style={{ marginBottom: 20 }}
27+
/>
28+
</div>
1829
<div className="player-panel" id="player-ground-1" ref={playerPanel}></div>
19-
<TimelinePlayer timelineState={timelineState} />
30+
<TimelinePlayer timelineState={timelineState} autoScrollWhenPlay={autoScrollWhenPlay} />
2031
<Timeline
21-
scale={5}
32+
scale={scale}
33+
scaleWidth={scaleWidth}
34+
startLeft={startLeft}
2235
autoScroll={true}
2336
ref={timelineState}
2437
editorData={data}

docs/engine/engine-basic/mock.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
import { TimelineEffect, TimelineRow, TimelineAction } from '@xzdarcy/react-timeline-editor';
2-
import lottieControl from './lottieControl';
1+
import { TimelineAction, TimelineEffect, TimelineRow } from '@xzdarcy/react-timeline-editor';
32
import audioControl from './audioControl';
3+
import lottieControl from './lottieControl';
4+
5+
export const scaleWidth = 160;
6+
export const scale = 5;
7+
export const startLeft = 20;
48

59
export interface CustomTimelineAction extends TimelineAction {
610
data: {

docs/engine/engine-basic/player.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import { CaretRightOutlined, PauseOutlined } from '@ant-design/icons';
22
import { TimelineState } from '@xzdarcy/react-timeline-editor';
33
import { Select } from 'antd';
4-
import React, { FC, useEffect, useLayoutEffect, useState } from 'react';
4+
import React, { FC, useEffect, useState } from 'react';
55
import lottieControl from './lottieControl';
6+
import { scale, scaleWidth, startLeft } from './mock';
67

78
const { Option } = Select;
89
export const Rates = [0.2, 0.5, 1.0, 1.5, 2.0];
910

1011
const TimelinePlayer: FC<{
1112
timelineState: React.MutableRefObject<TimelineState>;
12-
}> = ({ timelineState }) => {
13+
autoScrollWhenPlay: React.MutableRefObject<boolean>;
14+
}> = ({ timelineState, autoScrollWhenPlay }) => {
1315
const [isPlaying, setIsPlaying] = useState(false);
1416
const [time, setTime] = useState(0);
1517

@@ -19,7 +21,15 @@ const TimelinePlayer: FC<{
1921
engine.listener.on('play', () => setIsPlaying(true));
2022
engine.listener.on('paused', () => setIsPlaying(false));
2123
engine.listener.on('afterSetTime', ({ time }) => setTime(time));
22-
engine.listener.on('setTimeByTick', ({ time }) => setTime(time));
24+
engine.listener.on('setTimeByTick', ({ time }) => {
25+
setTime(time);
26+
27+
if (autoScrollWhenPlay.current) {
28+
const autoScrollFrom = 500;
29+
const left = time * (scaleWidth / scale) + startLeft - autoScrollFrom;
30+
timelineState.current.setScrollLeft(left)
31+
}
32+
});
2333

2434
return () => {
2535
if (!engine) return;

src/components/timeline.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export const Timeline = React.forwardRef<TimelineState, TimelineEditor>((props,
6464
// deprecated
6565
useEffect(() => {
6666
scrollSync.current && scrollSync.current.setState({ scrollTop: scrollTop });
67-
}, [scrollTop])
67+
}, [scrollTop]);
6868

6969
/** 处理主动数据变化 */
7070
const handleEditorDataChange = (editorData: TimelineRow[]) => {
@@ -129,12 +129,12 @@ export const Timeline = React.forwardRef<TimelineState, TimelineEditor>((props,
129129
reRender: engineRef.current.reRender.bind(engineRef.current),
130130
play: (param: Parameters<TimelineState['play']>[0]) => engineRef.current.play({ ...param }),
131131
pause: engineRef.current.pause.bind(engineRef.current),
132-
setScrollLeft: (val) =>{
133-
scrollSync.current && scrollSync.current.setState({ scrollLeft: val });
132+
setScrollLeft: (val) => {
133+
scrollSync.current && scrollSync.current.setState({ scrollLeft: Math.max(val, 0) });
134+
},
135+
setScrollTop: (val) => {
136+
scrollSync.current && scrollSync.current.setState({ scrollTop: Math.max(val, 0) });
134137
},
135-
setScrollTop: (val) =>{
136-
scrollSync.current && scrollSync.current.setState({ scrollTop: val });
137-
}
138138
}));
139139

140140
return (

0 commit comments

Comments
 (0)