diff --git a/web/src/hooks/use-handle-dragging.ts b/web/src/hooks/use-handle-dragging.ts index 295e035c6..0f1444c03 100644 --- a/web/src/hooks/use-handle-dragging.ts +++ b/web/src/hooks/use-handle-dragging.ts @@ -71,6 +71,7 @@ function useDraggableHandler({ ( newHandlePosition: number, segmentStartTime: number, + scrollTimeline: boolean, updateHandle: boolean, ) => { const thumb = scrollTimeRef.current; @@ -85,10 +86,12 @@ function useDraggableHandler({ minute: "2-digit", ...(segmentDuration < 60 && { second: "2-digit" }), }); - scrollIntoView(thumb, { - scrollMode: "if-needed", - behavior: "smooth", - }); + if (scrollTimeline) { + scrollIntoView(thumb, { + block: "center", + behavior: "smooth", + }); + } } }); @@ -136,7 +139,7 @@ function useDraggableHandler({ const parentScrollTop = getCumulativeScrollTop(timelineRef.current); const newHandlePosition = Math.min( - visibleTimelineHeight - timelineTop + parentScrollTop, + visibleTimelineHeight + parentScrollTop, Math.max( segmentHeight + scrolled, clientY - timelineTop + parentScrollTop, @@ -148,9 +151,14 @@ function useDraggableHandler({ timelineStart - segmentIndex * segmentDuration, ); + const scrollTimeline = + clientY < visibleTimelineHeight * 0.1 || + clientY > visibleTimelineHeight * 0.9; + updateHandlebarPosition( newHandlePosition - segmentHeight, segmentStartTime, + scrollTimeline, false, ); @@ -202,6 +210,7 @@ function useDraggableHandler({ newHandlePosition - segmentHeight, handlebarTime, true, + true, ); } // we know that these deps are correct