mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +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