గైడ్లు · 06
టైమ్లైన్లు సీక్ చేయగల ఒకే గడియారం నుండి అనేక ట్రాక్లను నడపండి: ప్లే, పాజ్, సీక్, రివర్స్, రేటు మార్పు.
ఒకే గడియారంపై ట్రాక్లు useTimeline(tracks, options, deps) కాంపోనెంట్కు చెందిన టైమ్లైన్ను సృష్టిస్తుంది. ప్రతి ట్రాక్ keyframe-ల జాబితా, లేదా మిల్లీసెకన్లలో at, duration ఉన్న { values, times, at, duration }.
progress ఒకే CSS వేరియబుల్; సంఖ్య లేదా పొడవు ట్రాక్లు దాని calc() వ్యక్తీకరణలు. అందువల్ల సాధారణ style-లోని టైమ్లైన్ ఫ్రేమ్కు ఒకే వేరియబుల్ రాస్తుంది.
JavaScript ఆఫ్లో ఉంది. కింద ఉన్న కోడే పూర్తి ఉదాహరణ.
App.jsx import { useRef } from 'react' ;
import { useTimeline } from '@kkwaenggwari/animated' ;
import './styles.css' ;
export default function App ({ duration = 3000 , repeat = true } ) {
const timeline = useTimeline (
{
x : ['0px' , '220px' , '220px' , '0px' , '0px' ],
y : ['0px' , '0px' , '110px' , '110px' , '0px' ],
turn : ['0deg' , '90deg' , '180deg' , '270deg' , '360deg' ],
round : ['50%' , '12%' , '50%' , '12%' , '50%' ],
},
{ duration, repeat : repeat ? Infinity : 0 },
[duration, repeat],
);
const bar = useRef (null );
const seek = (event ) => {
const box = bar.current .getBoundingClientRect ();
const ratio = Math .min (1 , Math .max (0 , (event.clientX - box.left ) / box.width ));
timeline.pause ();
timeline.seek (ratio * timeline.duration );
};
const { x, y, turn, round } = timeline.values ;
return (
<div className ="stage" >
<div className ="canvas" >
<span
className ="shape"
style ={{ transform: `translate (${x }, ${y }) rotate (${turn })`, borderRadius: round }}
/>
</div >
<div className ="player" >
<button type ="button" onClick ={() => timeline.play()}>
Play
</button >
<button type ="button" onClick ={() => timeline.pause()}>
Pause
</button >
<div
ref ={bar}
className ="scrub"
onPointerDown ={(event) => {
event.currentTarget.setPointerCapture(event.pointerId);
seek(event);
}}
onPointerMove={(event) => {
if (event.buttons) seek(event);
}}
>
<span style ={{ transform: `scaleX (${timeline.progress })` }} />
</div >
</div >
</div >
);
}styles.css .stage {
display : grid;
gap : 16px ;
padding : 28px ;
}
.canvas {
height : 190px ;
padding : 20px ;
border-radius : 16px ;
background : #0b1440 ;
}
.shape {
display : block;
width : 60px ;
height : 60px ;
background : #5c7cff ;
}
.player {
display : flex;
align-items : center;
gap : 8px ;
}
.player button {
min-height : 40px ;
padding : 0 16px ;
border : 1px solid #e4e6ef ;
border-radius : 999px ;
background : #fff ;
font : inherit;
cursor : pointer;
}
.scrub {
flex : 1 ;
height : 12px ;
border-radius : 999px ;
background : #eef2ff ;
overflow : hidden;
cursor : pointer;
touch-action : none;
}
.scrub span {
display : block;
height : 100% ;
background : #2854ff ;
transform-origin : left center;
}ప్లేబ్యాక్ నియంత్రణ play({ from, rate }), pause(), seek(ms), reverse() గడియారాన్ని నియంత్రిస్తాయి. state, currentTime, duration, finished promise దాన్ని వివరిస్తాయి. repeat, repeatDelay దాన్ని లూప్ చేస్తాయి.
Title.jsx కోడ్ కాపీ చేయండి const intro = useTimeline (
{
y : ['24px' , '0px' ],
fade : { values : [0 , 1 ], at : 0 , duration : 300 },
line : { values : [0 , 1 ], at : 200 , duration : 600 },
},
{ duration : 800 },
);
intro.seek (400 );
intro.play ({ rate : 0.5 });
intro.reverse ();React బయట createTimeline కాంపోనెంట్ లేని అదే గడియారం. పూర్తయ్యాక dispose() కాల్ చేయండి.