diff --git a/src/app/(home)/header.tsx b/src/app/(home)/header.tsx index 538bc0b..fbf296c 100644 --- a/src/app/(home)/header.tsx +++ b/src/app/(home)/header.tsx @@ -1,59 +1,96 @@ 'use client' -import {ReactNode, useEffect, useState} from 'react' +import {ReactNode, useCallback, useEffect, useMemo, useState} from 'react' import Link from 'next/link' import Wrap from '@/components/wrap' export type HeaderProps = {} export default function Header(props: HeaderProps) { - const [isScrolled, setIsScrolled] = useState(window.scrollY > 48) - const handleScroll = () => { - setIsScrolled(window.scrollY > 48) - } + // ====================== + // 滚动条状态 + // ====================== + const [scroll, setScroll] = useState(window.scrollY > 48) + + const handleScroll = useCallback(() => { + setScroll(window.scrollY > 48) + }, []) useEffect(() => { window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } - }, []) + }, [handleScroll]) + + // ====================== + // 菜单状态 + // ====================== + + const [menu, setMenu] = useState('') + + // ====================== + // 覆盖状态 + // ====================== + + const [overlay, setOverlay] = useState(false) + + useEffect(() => { + setOverlay(scroll || menu !== '') + }, [menu, scroll]) + + // ====================== + // 渲染组件 + // ====================== return (
- - -
+ +
{/* logo */} - + {`logo`} {/* 菜单 */} -
+ + {/* 下拉菜单 */} +
+
+ {{ + 'product': , + 'solution': , + 'help': , + }[menu]} + Using a wrapper div to handle transitions
) } -type NavItemTopProps = { +function NavItemTop(props: { children: ReactNode -} - -function NavItemTop(props: NavItemTopProps) { + onEnter?: () => void + onLeave?: () => void +}) { return ( -
  • +
  • {props.children}
  • ) @@ -99,3 +153,41 @@ function SvgDown() { ) } + +function ProductMenu() { + const [type, setType] = useState<'domestic' | 'oversea'>('domestic') + return ( +
    + +
    + {{ + 'domestic':
    国内代理
    , + 'oversea':
    海外代理
    , + }[type]} +
    +
    + ) +} + +function SolutionMenu() { + return ( +
    解决方案
    + ) +} + +function HelpMenu() { + return ( +
    帮助中心
    + ) +}