From d6b67c6af6fe9077548c9070f695e974c9d58c3e Mon Sep 17 00:00:00 2001 From: "tangly1024.com" Date: Thu, 9 Mar 2023 14:31:48 +0800 Subject: [PATCH] collapse menu --- components/Collapse.js | 4 +++ themes/simple/components/CollapseMenu.js | 46 ++++++++++++++++++++++++ themes/simple/components/DropMenu.js | 1 - themes/simple/components/NavBar.js | 2 +- themes/simple/components/NavBarMenu.js | 27 +++++++++++--- 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 themes/simple/components/CollapseMenu.js diff --git a/components/Collapse.js b/components/Collapse.js index 798e2b86..57626c04 100644 --- a/components/Collapse.js +++ b/components/Collapse.js @@ -8,6 +8,10 @@ import React from 'react' const Collapse = props => { const collapseRef = React.useRef(null) const type = props.type || 'vertical' + /** + * 折叠 + * @param {*} element + */ const collapseSection = element => { const sectionHeight = element.scrollHeight const sectionWidth = element.scrollWidth diff --git a/themes/simple/components/CollapseMenu.js b/themes/simple/components/CollapseMenu.js new file mode 100644 index 00000000..b5853aee --- /dev/null +++ b/themes/simple/components/CollapseMenu.js @@ -0,0 +1,46 @@ +import Collapse from '@/components/Collapse' +import Link from 'next/link' +import { useState } from 'react' + +/** + * 折叠菜单 + * @param {*} param0 + * @returns + */ +export const CollapseMenu = ({ link }) => { + const [show, changeShow] = useState(false) + const hasSubMenu = link?.subMenus?.length > 0 + + const [isOpen, changeIsOpen] = useState(false) + + const toggleShow = () => { + changeShow(!show) + } + + const toggleOpenSubMenu = () => { + changeIsOpen(!isOpen) + } + + return <> +
+ + {link?.name} + {hasSubMenu && } + +
+ + {/* 折叠子菜单 */} + {hasSubMenu && + {link.subMenus.map(sLink => { + return
+ + {sLink.title} + +
+ })} +
} + +} diff --git a/themes/simple/components/DropMenu.js b/themes/simple/components/DropMenu.js index d45dea40..eebfe0f1 100644 --- a/themes/simple/components/DropMenu.js +++ b/themes/simple/components/DropMenu.js @@ -7,7 +7,6 @@ export const DropMenu = ({ link }) => { return
changeShow(true)} onMouseOut={() => changeShow(false)} > - {/* 大屏菜单 */} diff --git a/themes/simple/components/NavBar.js b/themes/simple/components/NavBar.js index 823831d4..46aeb7af 100644 --- a/themes/simple/components/NavBar.js +++ b/themes/simple/components/NavBar.js @@ -56,7 +56,7 @@ export const NavBar = (props) => { {!showSearchInput && ()}
-
+
{/* */}
diff --git a/themes/simple/components/NavBarMenu.js b/themes/simple/components/NavBarMenu.js index 17658696..b40bcef5 100644 --- a/themes/simple/components/NavBarMenu.js +++ b/themes/simple/components/NavBarMenu.js @@ -1,6 +1,9 @@ import BLOG from '@/blog.config' +import Collapse from '@/components/Collapse' import { useGlobal } from '@/lib/global' +import { useState } from 'react' import CONFIG_SIMPLE from '../config_simple' +import { CollapseMenu } from './CollapseMenu' import { DropMenu } from './DropMenu' /** @@ -10,6 +13,10 @@ import { DropMenu } from './DropMenu' */ export const NavBarMenu = ({ customNav, customMenu }) => { const { locale } = useGlobal() + const [isOpen, changeIsOpen] = useState(true) + const toggleIsOpen = () => { + changeIsOpen(!isOpen) + } let links = [ { icon: 'fas fa-search', name: locale.NAV.SEARCH, to: '/search', show: CONFIG_SIMPLE.MENU_SEARCH }, @@ -40,12 +47,24 @@ export const NavBarMenu = ({ customNav, customMenu }) => { })}