// import Image from 'next/image' import BLOG from '@/blog.config' import { ArrowSmallRight, PlusSmall } from '@/components/HeroIcons' import Link from 'next/link' import { useRouter } from 'next/router' import { useImperativeHandle, useRef, useState } from 'react' import CONFIG from '../config' /** * 顶部英雄区 * 左右布局, * 左侧:banner组 * 右侧:今日卡牌遮罩 * @returns */ const Hero = props => { return (
{/* 左侧banner组 */} {/* 右侧置顶文章组 */}
) } /** * 英雄区左侧banner组 * @returns */ function BannerGroup(props) { return ( // 左侧英雄区
{/* 动图 */} {/* 导航分类 */}
) } /** * 英雄区左上角banner动图 * @returns */ function Banner(props) { const router = useRouter() const { latestPosts } = props // 跳转到任意文章 function handleClickBanner() { const randomIndex = Math.floor(Math.random() * latestPosts.length) const randomPost = latestPosts[randomIndex] router.push(randomPost.slug) } return
{/* 斜向滚动的图标 */} {/* 遮罩 */}
} /** * 图标滚动标签组 * 英雄区左上角banner条中斜向滚动的图标 */ function TagsGroupBar() { const groupIcons = CONFIG.GROUP_ICONS.concat(CONFIG.GROUP_ICONS) return (
{groupIcons?.map((g, index) => { return (
{/* eslint-disable-next-line @next/next/no-img-element */}
{/* eslint-disable-next-line @next/next/no-img-element */}
) })}
) } /** * 英雄区左下角3个指定分类按钮 * @returns */ function GroupMenu() { return (
{CONFIG.HERO_CATEGORY_1?.title}
{CONFIG.HERO_CATEGORY_2?.title}
{/* 第三个标签在小屏上不显示 */}
{CONFIG.HERO_CATEGORY_3?.title}
) } /** * 置顶文章区域 */ function TopGroup(props) { const { latestPosts, siteInfo } = props const todayCardRef = useRef() function handleMouseLeave() { todayCardRef.current.coverUp() } return (
{/* 制定最新文章 */}
{latestPosts?.map((p, index) => { return
{/* eslint-disable-next-line */} {p?.title}
{p?.title}
{/* hover 悬浮的 ‘荐’ 字 */}
})}
) } /** * 英雄区右侧,今日卡牌 * @returns */ function TodayCard({ cRef }) { const router = useRouter() // 卡牌是否盖住下层 const [isCoverUp, setIsCoverUp] = useState(true) /** * 外部可以调用此方法 */ useImperativeHandle(cRef, () => { return { coverUp: () => { setIsCoverUp(true) } } }) /** * 点击更多 * @param {*} e */ function handleClickMore(e) { e.stopPropagation() setIsCoverUp(false) } /** * 点击卡片跳转的链接 * @param {*} e */ function handleCardClick(e) { router.push(CONFIG.HERO_TITLE_LINK) } return } export default Hero