import { useCallback, useEffect, useRef, useState } from 'react' import Logo from './Logo' import { MenuListTop } from './MenuListTop' import throttle from 'lodash.throttle' import RandomPostButton from './RandomPostButton' import SearchButton from './SearchButton' import SlideOver from './SlideOver' import ReadingProgress from './ReadingProgress' /** * 顶部导航 * @param {*} param0 * @returns */ const NavBar = props => { const [fixedNav, setFixedNav] = useState(false) const [textWhite, setTextWhite] = useState(false) const [navBgWhite, setBgWhite] = useState(false) const slideOverRef = useRef() const toggleMenuOpen = () => { slideOverRef?.current?.toggleSlideOvers() } // 监听滚动 useEffect(() => { scrollTrigger() window.addEventListener('scroll', scrollTrigger) return () => { window.removeEventListener('scroll', scrollTrigger) } }, []) const throttleMs = 200 /** * 根据滚动条,切换导航栏样式 */ const scrollTrigger = useCallback(throttle(() => { const scrollS = window.scrollY // 导航栏设置 白色背景 if (scrollS <= 0) { setFixedNav(false) setBgWhite(false) // 文章详情页特殊处理 if (document.querySelector('#post-bg')) { setFixedNav(true) setTextWhite(true) setBgWhite(false) } } else { // 向下滚动后的导航样式 setFixedNav(true) setTextWhite(false) setBgWhite(true) } }, throttleMs)) return (<> {/* 顶部导航菜单栏 */} ) } export default NavBar