import CommonHead from '@/components/CommonHead' import FloatDarkModeButton from '@/components/FloatDarkModeButton' import Footer from '@/components/Footer' import JumpToTopButton from '@/components/JumpToTopButton' import LoadingCover from '@/components/LoadingCover' import SideAreaLeft from '@/components/SideAreaLeft' import SideAreaRight from '@/components/SideAreaRight' import TopNav from '@/components/TopNav' import { useGlobal } from '@/lib/global' import throttle from 'lodash.throttle' import PropTypes from 'prop-types' import React, { useCallback, useEffect, useRef } from 'react' /** * 基础布局 采用左右两侧布局,移动端使用顶部导航栏 * @param children * @param layout * @param fullWidth * @param tags * @param meta * @param post * @param totalPosts * @param currentSearch * @param currentCategory * @param currentTag * @param categories * @param customMeta * @returns {JSX.Element} * @constructor */ const BaseLayout = ({ children, layout, fullWidth, tags, meta, post, totalPosts, currentSearch, currentCategory, currentTag, categories, ...customMeta }) => { let windowTop = 0 const scrollTrigger = useCallback(throttle(() => { const scrollS = window.scrollY if (scrollS >= windowTop && scrollS > 10) { handleScrollDown() windowTop = scrollS } else { handleScrollUp() windowTop = scrollS } }, 200)) // 监听滚动 useEffect(() => { window.addEventListener('scroll', scrollTrigger) scrollTrigger() return () => { window.removeEventListener('scroll', scrollTrigger) } }, []) const { onLoading } = useGlobal() const targetRef = useRef(null) return (