mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-07 11:45:24 +03:00
Fix scrolling behavior
This commit is contained in:
parent
ac83da09ea
commit
2db3ea61ea
@ -27,9 +27,9 @@ function App() {
|
|||||||
<BrowserRouter>
|
<BrowserRouter>
|
||||||
<Wrapper>
|
<Wrapper>
|
||||||
<Header onToggleNavbar={toggleNavbar} />
|
<Header onToggleNavbar={toggleNavbar} />
|
||||||
<div className="grid grid-cols-[auto,1fr] flex-grow-1 md:overflow-auto">
|
<div className="grid grid-cols-[auto,1fr] flex-grow-1 overflow-auto">
|
||||||
<Sidebar sheetOpen={sheetOpen} setSheetOpen={setSheetOpen} />
|
<Sidebar sheetOpen={sheetOpen} setSheetOpen={setSheetOpen} />
|
||||||
<div className="overflow-x-hidden px-4 py-2 w-screen md:w-full">
|
<div id="pageRoot" className="overflow-x-hidden px-4 py-2 md:w-full">
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/" element={<Dashboard />} />
|
<Route path="/" element={<Dashboard />} />
|
||||||
<Route path="/live" element={<Live />} />
|
<Route path="/live" element={<Live />} />
|
||||||
|
|||||||
@ -48,43 +48,52 @@ export default function PreviewThumbnailPlayer({
|
|||||||
playerRef.current.currentTime(startTs - relevantPreview.start);
|
playerRef.current.currentTime(startTs - relevantPreview.start);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[relevantPreview, startTs]
|
[relevantPreview, startTs, playerRef]
|
||||||
);
|
);
|
||||||
|
|
||||||
const observer = useRef<IntersectionObserver | null>();
|
const autoPlayObserver = useRef<IntersectionObserver | null>();
|
||||||
|
const preloadObserver = useRef<IntersectionObserver | null>();
|
||||||
const inViewRef = useCallback(
|
const inViewRef = useCallback(
|
||||||
(node: HTMLElement | null) => {
|
(node: HTMLElement | null) => {
|
||||||
if (observer.current) {
|
if (!preloadObserver.current) {
|
||||||
return;
|
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 {
|
if (shouldAutoPlay && !autoPlayObserver.current) {
|
||||||
observer.current = new IntersectionObserver(
|
try {
|
||||||
(entries) => {
|
autoPlayObserver.current = new IntersectionObserver(
|
||||||
if (entries[0].isIntersecting) {
|
(entries) => {
|
||||||
if (entries[0].intersectionRatio == 1.0) {
|
const [{ isIntersecting }] = entries;
|
||||||
if (shouldAutoPlay) {
|
if (isIntersecting) {
|
||||||
onPlayback(true);
|
onPlayback(true);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (shouldAutoPlay) {
|
|
||||||
onPlayback(false);
|
onPlayback(false);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
setVisible(false);
|
{ threshold: 1.0 }
|
||||||
}
|
);
|
||||||
},
|
if (node) autoPlayObserver.current.observe(node);
|
||||||
{ threshold: [0.0, 1.0], rootMargin: "10% 0% 25% 0%" }
|
} catch (e) {
|
||||||
);
|
// no op
|
||||||
if (node) observer.current.observe(node);
|
}
|
||||||
} catch (e) {
|
|
||||||
// no op
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[observer, onPlayback]
|
[preloadObserver, autoPlayObserver, onPlayback]
|
||||||
);
|
);
|
||||||
|
|
||||||
let content;
|
let content;
|
||||||
@ -137,7 +146,7 @@ export default function PreviewThumbnailPlayer({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<AspectRatio
|
<AspectRatio
|
||||||
ref={inViewRef}
|
ref={relevantPreview ? inViewRef : null}
|
||||||
ratio={16 / 9}
|
ratio={16 / 9}
|
||||||
className="bg-black flex justify-center items-center"
|
className="bg-black flex justify-center items-center"
|
||||||
onMouseEnter={() => onPlayback(true)}
|
onMouseEnter={() => onPlayback(true)}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user