mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
✨ Add scroll-effect (shadow) to header bar
This commit is contained in:
parent
0f992dbe3b
commit
841a98e009
3 changed files with 57 additions and 1 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
44
modules/ppcp-settings/resources/js/hooks/useIsScrolled.js
Normal file
44
modules/ppcp-settings/resources/js/hooks/useIsScrolled.js
Normal 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;
|
Loading…
Add table
Add a link
Reference in a new issue