mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Scrollbar juddering (#5383)
* added scrollbar width to observer width. * subtract scrollBarWidth from scaledWidth * useMemo dependencies --------- Co-authored-by: Bernt Christian Egeland <cbegelan@gmail.com>
This commit is contained in:
parent
3b9bcb356b
commit
4a45089b95
@ -11,7 +11,15 @@ export default function CameraImage({ camera, onload, searchParams = '', stretch
|
|||||||
const [hasLoaded, setHasLoaded] = useState(false);
|
const [hasLoaded, setHasLoaded] = useState(false);
|
||||||
const containerRef = useRef(null);
|
const containerRef = useRef(null);
|
||||||
const canvasRef = useRef(null);
|
const canvasRef = useRef(null);
|
||||||
const [{ width: availableWidth }] = useResizeObserver(containerRef);
|
const [{ width: containerWidth }] = useResizeObserver(containerRef);
|
||||||
|
|
||||||
|
// Add scrollbar width (when visible) to the available observer width to eliminate screen juddering.
|
||||||
|
// https://github.com/blakeblackshear/frigate/issues/1657
|
||||||
|
let scrollBarWidth = 0;
|
||||||
|
if (window.innerWidth && document.body.offsetWidth) {
|
||||||
|
scrollBarWidth = window.innerWidth - document.body.offsetWidth;
|
||||||
|
}
|
||||||
|
const availableWidth = scrollBarWidth ? containerWidth + scrollBarWidth : containerWidth;
|
||||||
|
|
||||||
const { name } = config ? config.cameras[camera] : '';
|
const { name } = config ? config.cameras[camera] : '';
|
||||||
const enabled = config ? config.cameras[camera].enabled : 'True';
|
const enabled = config ? config.cameras[camera].enabled : 'True';
|
||||||
@ -22,7 +30,11 @@ export default function CameraImage({ camera, onload, searchParams = '', stretch
|
|||||||
const scaledHeight = Math.floor(availableWidth / aspectRatio);
|
const scaledHeight = Math.floor(availableWidth / aspectRatio);
|
||||||
return stretch ? scaledHeight : Math.min(scaledHeight, height);
|
return stretch ? scaledHeight : Math.min(scaledHeight, height);
|
||||||
}, [availableWidth, aspectRatio, height, stretch]);
|
}, [availableWidth, aspectRatio, height, stretch]);
|
||||||
const scaledWidth = useMemo(() => Math.ceil(scaledHeight * aspectRatio), [scaledHeight, aspectRatio]);
|
const scaledWidth = useMemo(() => Math.ceil(scaledHeight * aspectRatio - scrollBarWidth), [
|
||||||
|
scaledHeight,
|
||||||
|
aspectRatio,
|
||||||
|
scrollBarWidth,
|
||||||
|
]);
|
||||||
|
|
||||||
const img = useMemo(() => new Image(), []);
|
const img = useMemo(() => new Image(), []);
|
||||||
img.onload = useCallback(
|
img.onload = useCallback(
|
||||||
|
Loading…
Reference in New Issue
Block a user