From e307754bd790810e765a2341dfe4f2d4dfa790e2 Mon Sep 17 00:00:00 2001 From: Zuoling Rong Date: Sat, 3 May 2025 18:07:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E5=B5=8C=E5=A5=97=E5=AD=90=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20and=20=E4=BE=A7=E8=BE=B9=E6=A0=8F=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/style.css | 111 ++++++++++++++++++++++++++++++ src/generator.js | 90 ++++++++++++++++++++++--- src/script.js | 171 +++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 335 insertions(+), 37 deletions(-) diff --git a/assets/style.css b/assets/style.css index 52645a8..3b722b3 100644 --- a/assets/style.css +++ b/assets/style.css @@ -1475,4 +1475,115 @@ body .content.expanded { .copyright a:hover { color: var(--accent-hover); text-decoration: underline; +} + +/* 导航项包装器 - 包含导航项和子菜单 */ +.nav-item-wrapper { + position: relative; + display: flex; + flex-direction: column; + width: 100%; +} + +/* 子菜单切换图标 */ +.submenu-toggle { + font-size: 0.8rem; + margin-left: 0.5rem; + transition: transform 0.3s ease; +} + +/* 子菜单展开状态图标旋转 */ +.nav-item-wrapper.expanded .submenu-toggle { + transform: rotate(180deg); +} + +/* 子菜单容器 */ +.submenu { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + margin-left: 1.5rem; + opacity: 0; + visibility: hidden; +} + +/* 子菜单展开状态 */ +.nav-item-wrapper.expanded .submenu { + max-height: 500px; /* 设置足够大的值以容纳所有可能的子菜单项 */ + opacity: 1; + visibility: visible; +} + +/* 子菜单项样式 */ +.submenu-item { + display: flex; + align-items: center; + padding: 0.5rem 0.8rem; + color: var(--nav-item-color); + text-decoration: none; + border-radius: 8px; + transition: all 0.3s ease; + font-size: 0.9rem; + margin: 0.1rem 0; +} + +.submenu-item i { + margin-right: 0.8rem; + font-size: 0.85rem; + width: 16px; + text-align: center; +} + +.submenu-item span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.submenu-item:hover { + background-color: var(--secondary-bg); + color: var(--text-bright); +} + +.submenu-item.active { + background-color: var(--secondary-bg); + color: var(--text-bright); +} + +/* 侧边栏折叠状态下子菜单样式 */ +.sidebar.collapsed .submenu { + position: absolute; + left: 100%; + top: 0; + background-color: var(--sidebar-bg); + border-radius: 0 8px 8px 0; + box-shadow: 4px 0 10px var(--shadow-color); + margin-left: 0; + width: 180px; + opacity: 0; + visibility: hidden; + max-height: 0; + overflow: hidden; + z-index: 200; +} + +.sidebar.collapsed .nav-item-wrapper:hover .submenu { + max-height: 500px; + opacity: 1; + visibility: visible; +} + +.sidebar.collapsed .submenu-toggle { + display: none; +} + +/* 移动端样式调整 */ +@media (max-width: 768px) { + .sidebar .submenu { + margin-left: 1rem; + } + + .sidebar.active .submenu-item { + padding: 0.5rem 0.6rem; + } } \ No newline at end of file diff --git a/src/generator.js b/src/generator.js index 0680cc7..aafd0a5 100644 --- a/src/generator.js +++ b/src/generator.js @@ -228,14 +228,84 @@ function loadConfig() { } // 生成导航菜单 -function generateNavigation(navigation) { - return navigation.map(nav => ` - -
- -
- ${escapeHtml(nav.name)} -
`).join('\n'); +function generateNavigation(navigation, config) { + return navigation.map(nav => { + // 根据页面ID获取对应的子菜单项(分类) + let submenuItems = ''; + + // 首页页面添加子菜单(分类) + if (nav.id === 'home' && Array.isArray(config.categories)) { + submenuItems = ` + `; + } + // 书签页面添加子菜单(分类) + else if (nav.id === 'bookmarks' && config.bookmarks && Array.isArray(config.bookmarks.categories)) { + submenuItems = ` + `; + } + // 项目页面添加子菜单 + else if (nav.id === 'projects' && config.projects && Array.isArray(config.projects.categories)) { + submenuItems = ` + `; + } + // 文章页面添加子菜单 + else if (nav.id === 'articles' && config.articles && Array.isArray(config.articles.categories)) { + submenuItems = ` + `; + } + // 友链页面添加子菜单 + else if (nav.id === 'friends' && config.friends && Array.isArray(config.friends.categories)) { + submenuItems = ` + `; + } + + return ` + `; + }).join('\n'); } // 生成网站卡片HTML @@ -447,7 +517,7 @@ ${content}