// ================== 路由配置 ================== const routes = { 'home': 'views/home.html', 'channel': 'views/channel.html', 'about': 'views/about.html' }; // 获取当前 hash 中的路径(去掉 #/) function getHashPath() { const hash = window.location.hash.slice(1) || '/'; const path = hash.startsWith('/') ? hash.slice(1) : hash; return path || 'home'; } // ================== 加载视图 ================== async function loadView(path) { const routerView = document.getElementById('router-view'); if (!routerView) return; // 显示加载动画 routerView.innerHTML = '
'; try { const viewFile = routes[path]; if (!viewFile) { await load404(routerView); return; } const response = await fetch(viewFile); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const html = await response.text(); routerView.innerHTML = html; } catch (error) { console.error('加载视图失败:', error); routerView.innerHTML = ` `; } // 更新导航高亮和状态栏 updateActiveNav(path); updateStatusBar(path); } // 加载 404 页面 async function load404(container) { try { const resp = await fetch('views/404.html'); if (resp.ok) { container.innerHTML = await resp.text(); } else { container.innerHTML = ''; } } catch { container.innerHTML = ''; } } // 更新导航高亮 function updateActiveNav(path) { document.querySelectorAll('.nav-link').forEach(link => { link.classList.remove('active'); const linkPath = link.getAttribute('href').slice(2); if (linkPath === path) { link.classList.add('active'); } }); } // 更新状态栏 function updateStatusBar(path) { const statusEl = document.getElementById('current-route'); if (statusEl) { statusEl.textContent = `当前路由:/${path}`; } } // 监听 hash 变化 window.addEventListener('hashchange', () => { const path = getHashPath(); loadView(path); }); // 首次加载 window.addEventListener('DOMContentLoaded', () => { if (!window.location.hash) { window.location.hash = '#/home'; } else { const path = getHashPath(); loadView(path); } });