diff --git a/components/Header.tsx b/components/Header.tsx index e496314..2e779c1 100644 --- a/components/Header.tsx +++ b/components/Header.tsx @@ -3,7 +3,7 @@ import Link from 'next/link' import Image from 'next/image' import { Menu, X } from 'lucide-react' -import { useState } from 'react' +import { useState, useEffect, useRef } from 'react' import { useTerminal } from '@/lib/TerminalContext' import { useLanguage } from '@/lib/LanguageContext' import { CIStatusIndicator } from './CIStatusIndicator' @@ -28,7 +28,19 @@ export default function Header() { setLang(lang === 'en' ? 'zh' : 'en') } + const skillsRef = useRef(null) + const contactRef = useRef(null) + const educationRef = useRef(null) + useEffect(() => { + const handleClickOutside = (e: MouseEvent) => { + if (skillsRef.current && !skillsRef.current.contains(e.target as Node)) setSkillsOpen(false) + if (contactRef.current && !contactRef.current.contains(e.target as Node)) setContactOpen(false) + if (educationRef.current && !educationRef.current.contains(e.target as Node)) setEducationOpen(false) + } + document.addEventListener('mousedown', handleClickOutside) + return () => document.removeEventListener('mousedown', handleClickOutside) + }, []) return (
@@ -55,7 +67,7 @@ export default function Header() { > {t.header.nav.askPoimen} -
setSkillsOpen(false)}> +
)}
-
setContactOpen(false)}> +
-
setEducationOpen(false)}> +