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

@ -8,6 +8,7 @@
box-shadow: 0 -1px 0 0 $color-gray-300 inset; box-shadow: 0 -1px 0 0 $color-gray-300 inset;
background: var(--ppcp-color-app-bg); background: var(--ppcp-color-app-bg);
transition: box-shadow 0.3s;
--wp-components-color-accent: #{$color-blueberry}; --wp-components-color-accent: #{$color-blueberry};
--color-text: #{$color-gray-900}; --color-text: #{$color-gray-900};
@ -78,6 +79,10 @@
} }
} }
&.is-scrolled {
box-shadow: 0 -1px 0 0 $color-gray-300 inset, 0 8px 8px 0 rgba(85,93,102,.3);
}
@media screen and (max-width: 480px) { @media screen and (max-width: 480px) {
padding: 24px 35px; padding: 24px 35px;

View file

@ -2,16 +2,23 @@ import { Button, Icon } from '@wordpress/components';
import { chevronLeft } from '@wordpress/icons'; import { chevronLeft } from '@wordpress/icons';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import classNames from 'classnames';
import { OnboardingHooks } from '../../../../data'; import { OnboardingHooks } from '../../../../data';
import useIsScrolled from '../../../../hooks/useIsScrolled';
const Navigation = ( { stepDetails, onNext, onPrev, onExit } ) => { const Navigation = ( { stepDetails, onNext, onPrev, onExit } ) => {
const { title, isFirst, percentage, showNext, canProceed } = stepDetails; const { title, isFirst, percentage, showNext, canProceed } = stepDetails;
const { isScrolled } = useIsScrolled();
const state = OnboardingHooks.useNavigationState(); const state = OnboardingHooks.useNavigationState();
const isDisabled = ! canProceed( state ); const isDisabled = ! canProceed( state );
const className = classNames( 'ppcp-r-navigation-container', {
'is-scrolled': isScrolled,
} );
return ( return (
<div className="ppcp-r-navigation-container"> <div className={ className }>
<div className="ppcp-r-navigation"> <div className="ppcp-r-navigation">
<div className="ppcp-r-navigation--left"> <div className="ppcp-r-navigation--left">
<Button <Button

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;