Add scroll-effect (shadow) to header bar

This commit is contained in:
Philipp Stracker 2024-12-03 15:18:08 +01:00
parent 0f992dbe3b
commit 841a98e009
No known key found for this signature in database
3 changed files with 57 additions and 1 deletions

View file

@ -0,0 +1,44 @@
/**
* Taken from WooCommerce core:
* https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/client/admin/client/hooks/useIsScrolled.js
*/
import { useEffect, useRef, useState } from '@wordpress/element';
const isAtBottom = () =>
window.innerHeight + window.scrollY >= document.body.scrollHeight;
const useIsScrolled = () => {
const [ isScrolled, setIsScrolled ] = useState( false );
const [ atBottom, setAtBottom ] = useState( isAtBottom() );
const rafHandle = useRef( null );
useEffect( () => {
const updateIsScrolled = () => {
setIsScrolled( window.pageYOffset > 20 );
setAtBottom( isAtBottom() );
};
const scrollListener = () => {
rafHandle.current =
window.requestAnimationFrame( updateIsScrolled );
};
window.addEventListener( 'scroll', scrollListener );
window.addEventListener( 'resize', scrollListener );
return () => {
window.removeEventListener( 'scroll', scrollListener );
window.removeEventListener( 'resize', scrollListener );
window.cancelAnimationFrame( rafHandle.current );
};
}, [] );
return {
isScrolled,
atBottom,
atTop: ! isScrolled,
};
};
export default useIsScrolled;