import { useEffect } from 'react'; import { X } from 'lucide-react'; import { createPortal } from 'react-dom'; interface Props { src: string | null; alt?: string; open: boolean; onClose: () => void; } /** 帖子正文图片灯箱:展示原图,点击遮罩 / Esc / 关闭按钮退出 */ export default function ImageLightbox({ src, alt = '', open, onClose }: Props) { useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; window.addEventListener('keydown', onKey); return () => { document.body.style.overflow = prev; window.removeEventListener('keydown', onKey); }; }, [open, onClose]); if (!open || !src) return null; return createPortal(
点击空白处关闭