import { useGlobal } from '@/lib/global' import throttle from 'lodash.throttle' import Link from 'next/link' import { useCallback, useEffect, useRef, useState } from 'react' import CategoryGroup from './CategoryGroup' import Collapse from '@/components/Collapse' import Logo from './Logo' import { MenuList } from './MenuList' import SearchDrawer from './SearchDrawer' import TagGroups from './TagGroups' import CONFIG from '../config' import { siteConfig } from '@/lib/config' import { useNextGlobal } from '..' import { useRouter } from 'next/router' let windowTop = 0 /** * 顶部导航 * @param {*} param0 * @returns */ const TopNav = (props) => { const { tags, currentTag, categories, currentCategory } = props const { locale } = useGlobal() const searchDrawer = useRef() const collapseRef = useRef(null) const router = useRouter() const scrollTrigger = useCallback(throttle(() => { const scrollS = window.scrollY if (scrollS >= windowTop && scrollS > 10) { const nav = document.querySelector('#sticky-nav') nav && nav.classList.replace('top-0', '-top-40') windowTop = scrollS } else { const nav = document.querySelector('#sticky-nav') nav && nav.classList.replace('-top-40', 'top-0') windowTop = scrollS } }, 200), []) // 监听滚动 useEffect(() => { if (siteConfig('NEXT_NAV_TYPE', null, CONFIG) === 'autoCollapse') { scrollTrigger() window.addEventListener('scroll', scrollTrigger) } return () => { siteConfig('NEXT_NAV_TYPE', null, CONFIG) === 'autoCollapse' && window.removeEventListener('scroll', scrollTrigger) } }, []) const [isOpen, changeShow] = useState(false) // 监听滚动 useEffect(() => { router.events.on('routeChangeComplete', menuCollapseHide) return () => { router.events.off('routeChangeComplete', menuCollapseHide) } }, []) /** * 点击切换页面后关闭这点菜单 */ const menuCollapseHide = () => { changeShow(false) } const toggleMenuOpen = () => { changeShow(!isOpen) } const { searchModal } = useNextGlobal() const showSearchModal = () => { if (siteConfig('ALGOLIA_APP_ID')) { searchModal?.current?.openSearch() } else { searchDrawer?.current?.show() } } // 搜索栏 const searchDrawerSlot = <> {categories && (
{locale.COMMON.CATEGORY}
{locale.COMMON.MORE}
)} {tags && (
{locale.COMMON.TAGS}
{locale.COMMON.MORE}
)} return (
{/* 导航栏 */}
) } export default TopNav