diff --git a/docs/engine/engine-basic/index.tsx b/docs/engine/engine-basic/index.tsx index c3d8962..2341377 100644 --- a/docs/engine/engine-basic/index.tsx +++ b/docs/engine/engine-basic/index.tsx @@ -1,10 +1,11 @@ import { Timeline, TimelineState } from '@xzdarcy/react-timeline-editor'; +import { Switch } from 'antd'; import { cloneDeep } from 'lodash'; import React, { useRef, useState } from 'react'; -import TimelinePlayer from './player'; import { CustomRender0, CustomRender1 } from './custom'; -import { CustomTimelineAction, CusTomTimelineRow, mockData, mockEffect } from './mock'; import './index.less'; +import { CustomTimelineAction, CusTomTimelineRow, mockData, mockEffect, scale, scaleWidth, startLeft } from './mock'; +import TimelinePlayer from './player'; const defaultEditorData = cloneDeep(mockData); @@ -12,13 +13,25 @@ const TimelineEditor = () => { const [data, setData] = useState(defaultEditorData); const timelineState = useRef(); const playerPanel = useRef(); + const autoScrollWhenPlay = useRef(true); return (
+
+ (autoScrollWhenPlay.current = e)} + style={{ marginBottom: 20 }} + /> +
- + ; -}> = ({ timelineState }) => { + autoScrollWhenPlay: React.MutableRefObject; +}> = ({ timelineState, autoScrollWhenPlay }) => { const [isPlaying, setIsPlaying] = useState(false); const [time, setTime] = useState(0); @@ -19,7 +21,15 @@ const TimelinePlayer: FC<{ engine.listener.on('play', () => setIsPlaying(true)); engine.listener.on('paused', () => setIsPlaying(false)); engine.listener.on('afterSetTime', ({ time }) => setTime(time)); - engine.listener.on('setTimeByTick', ({ time }) => setTime(time)); + engine.listener.on('setTimeByTick', ({ time }) => { + setTime(time); + + if (autoScrollWhenPlay.current) { + const autoScrollFrom = 500; + const left = time * (scaleWidth / scale) + startLeft - autoScrollFrom; + timelineState.current.setScrollLeft(left) + } + }); return () => { if (!engine) return; diff --git a/src/components/timeline.tsx b/src/components/timeline.tsx index e222df6..28fe371 100644 --- a/src/components/timeline.tsx +++ b/src/components/timeline.tsx @@ -64,7 +64,7 @@ export const Timeline = React.forwardRef((props, // deprecated useEffect(() => { scrollSync.current && scrollSync.current.setState({ scrollTop: scrollTop }); - }, [scrollTop]) + }, [scrollTop]); /** 处理主动数据变化 */ const handleEditorDataChange = (editorData: TimelineRow[]) => { @@ -129,12 +129,12 @@ export const Timeline = React.forwardRef((props, reRender: engineRef.current.reRender.bind(engineRef.current), play: (param: Parameters[0]) => engineRef.current.play({ ...param }), pause: engineRef.current.pause.bind(engineRef.current), - setScrollLeft: (val) =>{ - scrollSync.current && scrollSync.current.setState({ scrollLeft: val }); + setScrollLeft: (val) => { + scrollSync.current && scrollSync.current.setState({ scrollLeft: Math.max(val, 0) }); + }, + setScrollTop: (val) => { + scrollSync.current && scrollSync.current.setState({ scrollTop: Math.max(val, 0) }); }, - setScrollTop: (val) =>{ - scrollSync.current && scrollSync.current.setState({ scrollTop: val }); - } })); return (