Fix organized content burger #317
|
@ -5,7 +5,6 @@ import React, {
|
||||||
useState,
|
useState,
|
||||||
useRef,
|
useRef,
|
||||||
useEffect,
|
useEffect,
|
||||||
useCallback,
|
|
||||||
} from "react";
|
} from "react";
|
||||||
|
|
||||||
import styles from "./OrganizedContent.module.css";
|
import styles from "./OrganizedContent.module.css";
|
||||||
|
@ -49,8 +48,7 @@ export function OrganizedContent({
|
||||||
const section = sections[currentIndex];
|
const section = sections[currentIndex];
|
||||||
const isReadAll = section.id === READ_ALL_ID;
|
const isReadAll = section.id === READ_ALL_ID;
|
||||||
const ref = useRef<HTMLDivElement>(null);
|
const ref = useRef<HTMLDivElement>(null);
|
||||||
const isVisible = useOnScreen(ref.current);
|
const burgerVisible = useOnScreen(ref.current);
|
||||||
const burgerVisible = useBurger(isVisible);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
mobileNavOpen
|
mobileNavOpen
|
||||||
|
@ -213,20 +211,6 @@ function Footer({ sections, currentIndex, link: Link }: FooterProps) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function useDebounce(func: () => void, delay = 300) {
|
|
||||||
const timerRef = useRef<number | undefined>(undefined);
|
|
||||||
return useCallback(() => {
|
|
||||||
if (timerRef.current != null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
timerRef.current = window.setTimeout(() => {
|
|
||||||
func();
|
|
||||||
timerRef.current = undefined;
|
|
||||||
}, delay);
|
|
||||||
}, [func, delay]);
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface SectionWithContent {
|
export interface SectionWithContent {
|
||||||
section: Section;
|
section: Section;
|
||||||
Content: ComponentType;
|
Content: ComponentType;
|
||||||
|
@ -332,33 +316,6 @@ function useOnScreen(element: HTMLDivElement | null) {
|
||||||
return isIntersecting;
|
return isIntersecting;
|
||||||
}
|
}
|
||||||
|
|
||||||
function useBurger(componentIsVisible: boolean): boolean {
|
|
||||||
const [prevScrollPos, setPrevScrollPos] = useState(0);
|
|
||||||
const [burgerVisible, setBurgerVisible] = useState(true);
|
|
||||||
|
|
||||||
const handleScroll = useDebounce(() => {
|
|
||||||
// find current scroll position
|
|
||||||
const currentScrollPos = window.pageYOffset;
|
|
||||||
setBurgerVisible(
|
|
||||||
componentIsVisible &&
|
|
||||||
((prevScrollPos > currentScrollPos &&
|
|
||||||
prevScrollPos - currentScrollPos > 70) ||
|
|
||||||
currentScrollPos < 10)
|
|
||||||
);
|
|
||||||
|
|
||||||
// set state to new scroll position
|
|
||||||
setPrevScrollPos(currentScrollPos);
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
window.addEventListener("scroll", handleScroll);
|
|
||||||
|
|
||||||
return () => window.removeEventListener("scroll", handleScroll);
|
|
||||||
}, [handleScroll]);
|
|
||||||
|
|
||||||
return burgerVisible;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inlining this svg because we want to fill in colors using css variables
|
// Inlining this svg because we want to fill in colors using css variables
|
||||||
function Burger() {
|
function Burger() {
|
||||||
return (
|
return (
|
||||||
|
|
Loading…
Reference in New Issue