diff --git a/web-new/src/App.tsx b/web-new/src/App.tsx index b15d7ce48..84158fd4f 100644 --- a/web-new/src/App.tsx +++ b/web-new/src/App.tsx @@ -27,9 +27,9 @@ function App() {
-
+
-
+
} /> } /> diff --git a/web-new/src/components/player/PreviewThumbnailPlayer.tsx b/web-new/src/components/player/PreviewThumbnailPlayer.tsx index 410400ca1..12145232d 100644 --- a/web-new/src/components/player/PreviewThumbnailPlayer.tsx +++ b/web-new/src/components/player/PreviewThumbnailPlayer.tsx @@ -48,43 +48,52 @@ export default function PreviewThumbnailPlayer({ playerRef.current.currentTime(startTs - relevantPreview.start); } }, - [relevantPreview, startTs] + [relevantPreview, startTs, playerRef] ); - const observer = useRef(); + const autoPlayObserver = useRef(); + const preloadObserver = useRef(); const inViewRef = useCallback( (node: HTMLElement | null) => { - if (observer.current) { - return; + if (!preloadObserver.current) { + try { + preloadObserver.current = new IntersectionObserver( + (entries) => { + const [{ isIntersecting }] = entries; + setVisible(isIntersecting); + }, + { + threshold: 0, + root: document.getElementById("pageRoot"), + rootMargin: "10% 0px 25% 0px", + } + ); + if (node) preloadObserver.current.observe(node); + } catch (e) { + // no op + } } - try { - observer.current = new IntersectionObserver( - (entries) => { - if (entries[0].isIntersecting) { - if (entries[0].intersectionRatio == 1.0) { - if (shouldAutoPlay) { - onPlayback(true); - } + if (shouldAutoPlay && !autoPlayObserver.current) { + try { + autoPlayObserver.current = new IntersectionObserver( + (entries) => { + const [{ isIntersecting }] = entries; + if (isIntersecting) { + onPlayback(true); } else { - setVisible(true); - } - } else { - if (shouldAutoPlay) { onPlayback(false); } - - setVisible(false); - } - }, - { threshold: [0.0, 1.0], rootMargin: "10% 0% 25% 0%" } - ); - if (node) observer.current.observe(node); - } catch (e) { - // no op + }, + { threshold: 1.0 } + ); + if (node) autoPlayObserver.current.observe(node); + } catch (e) { + // no op + } } }, - [observer, onPlayback] + [preloadObserver, autoPlayObserver, onPlayback] ); let content; @@ -137,7 +146,7 @@ export default function PreviewThumbnailPlayer({ return ( onPlayback(true)}