import LogoBar from './LogoBar' import { useCallback, useEffect, useRef, useState } from 'react' import Collapse from '@/components/Collapse' import { MenuBarMobile } from './MenuBarMobile' import { useGlobal } from '@/lib/global' import CONFIG from '../config' import BLOG from '@/blog.config' import throttle from 'lodash.throttle' import { useRouter } from 'next/router' import { MenuItemDrop } from './MenuItemDrop' import SearchInput from './SearchInput' import DarkModeButton from '@/components/DarkModeButton' /** * 顶部导航栏 + 菜单 * @param {} param0 * @returns */ export default function TopNavBar(props) { const { className, customNav, customMenu } = props const [isOpen, changeShow] = useState(false) const collapseRef = useRef(null) const { locale } = useGlobal() let windowTop = 0 // 监听滚动 useEffect(() => { scrollTrigger() window.addEventListener('scroll', scrollTrigger) return () => { window.removeEventListener('scroll', scrollTrigger) } }, []) const throttleMs = 200 const scrollTrigger = useCallback(throttle(() => { const scrollS = window.scrollY const nav = document.querySelector('#nav-bg') // const header = document.querySelector('#top-nav') const header = document.querySelector('#container-inner') const showNav = scrollS <= windowTop || scrollS < 5 || (scrollS <= header.clientHeight)// 非首页无大图时影藏顶部 滚动条置顶时隐藏 if (!showNav) { nav && nav.classList.replace('-top-20', 'top-0') windowTop = scrollS } else { nav && nav.classList.replace('top-0', '-top-20') windowTop = scrollS } }, throttleMs) ) const defaultLinks = [ { icon: 'fas fa-th', name: locale.COMMON.CATEGORY, to: '/category', show: CONFIG.MENU_CATEGORY }, { icon: 'fas fa-tag', name: locale.COMMON.TAGS, to: '/tag', show: CONFIG.MENU_TAG }, { icon: 'fas fa-archive', name: locale.NAV.ARCHIVE, to: '/archive', show: CONFIG.MENU_ARCHIVE }, { icon: 'fas fa-search', name: locale.NAV.SEARCH, to: '/search', show: CONFIG.MENU_SEARCH } ] let links = defaultLinks.concat(customNav) const toggleMenuOpen = () => { changeShow(!isOpen) } // 如果 开启自定义菜单,则覆盖Page生成的菜单 if (BLOG.CUSTOM_MENU) { links = customMenu } return (
) }