From 61f3e77f588f30a8d9828e7b01212a24ebe5fcdd Mon Sep 17 00:00:00 2001 From: Jorrin Date: Wed, 14 Feb 2024 22:18:07 +0100 Subject: [PATCH] fix slider resetting while sliding --- apps/expo/src/components/player/VideoSlider.tsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/expo/src/components/player/VideoSlider.tsx b/apps/expo/src/components/player/VideoSlider.tsx index b10bb84..d1f4e8a 100644 --- a/apps/expo/src/components/player/VideoSlider.tsx +++ b/apps/expo/src/components/player/VideoSlider.tsx @@ -54,10 +54,13 @@ const VideoSlider = ({ onSlidingComplete }: VideoSliderProps) => { }; const valueX = valueToX(value); const translateX = useSharedValue(valueToX(value)); + const isDragging = useSharedValue(false); useEffect(() => { - translateX.value = clamp(valueX, 0, width - knobSize_); - }, [valueX]); + if (!isDragging.value) { + translateX.value = clamp(valueX, 0, width - knobSize_); + } + }, [valueX, isDragging.value]); const _onSlidingComplete = (xValue: number) => { "worklet"; @@ -66,16 +69,26 @@ const VideoSlider = ({ onSlidingComplete }: VideoSliderProps) => { const _onActive = (value: number) => { "worklet"; + isDragging.value = true; translateX.value = clamp(value, 0, width - knobSize_); runOnJS(setIsIdle)(false); }; + const _onEnd = () => { + "worklet"; + isDragging.value = false; + _onSlidingComplete(translateX.value); + }; + const onGestureEvent = useAnimatedGestureHandler< PanGestureHandlerGestureEvent, { offsetX: number } >({ onStart: (_, ctx) => (ctx.offsetX = translateX.value), onActive: (event, ctx) => _onActive(event.translationX + ctx.offsetX), + onEnd: _onEnd, + onCancel: _onEnd, + onFinish: _onEnd, }); const onTapEvent = (