+
diff --git a/components/BlogPostCard.js b/components/BlogPostCard.js
index a7b0dd0f..9750d30f 100644
--- a/components/BlogPostCard.js
+++ b/components/BlogPostCard.js
@@ -9,7 +9,7 @@ import TagItemMini from './TagItemMini'
const BlogPostCard = ({ post, tags }) => {
return (
+ rounded-md w-full bg-white dark:bg-gray-800 dark:hover:bg-gray-700 dark:border-gray-600'>
diff --git a/components/BlogPostListScroll.js b/components/BlogPostListScroll.js
index d6337edf..e272ed49 100644
--- a/components/BlogPostListScroll.js
+++ b/components/BlogPostListScroll.js
@@ -56,7 +56,7 @@ const BlogPostListScroll = ({ posts = [], tags, currentSearch, currentCategory,
return
{/* 文章列表 */}
-
+
{postsToShow.map(post => (
))}
diff --git a/components/SideBar.js b/components/SideBar.js
index 3ce2a3b2..bae915c1 100644
--- a/components/SideBar.js
+++ b/components/SideBar.js
@@ -54,7 +54,7 @@ const SideBar = ({ title, tags, currentTag, post, posts, categories, currentCate
{locale.COMMON.CATEGORY}
-
+
{locale.COMMON.MORE}
diff --git a/components/StickyBar.js b/components/StickyBar.js
index 18f10349..abbc25c9 100644
--- a/components/StickyBar.js
+++ b/components/StickyBar.js
@@ -1,3 +1,8 @@
+import throttle from 'lodash.throttle'
+import { useCallback, useEffect } from 'react'
+
+let windowTop = 0
+
/**
* 标签组导航条,默认隐藏仅在移动端显示
* @param tags
@@ -7,9 +12,31 @@
*/
const StickyBar = ({ children }) => {
if (!children) return <>>
+ const scrollTrigger = useCallback(throttle(() => {
+ const scrollS = window.scrollY
+ if (scrollS >= windowTop && scrollS > 10) {
+ const stickyBar = document.querySelector('#sticky-bar')
+ stickyBar && stickyBar.classList.replace('top-14', 'top-0')
+ windowTop = scrollS
+ } else {
+ const stickyBar = document.querySelector('#sticky-bar')
+ stickyBar && stickyBar.classList.replace('top-0', 'top-14')
+ windowTop = scrollS
+ }
+ }, 200))
+
+ // 监听滚动
+ useEffect(() => {
+ window.addEventListener('scroll', scrollTrigger)
+ scrollTrigger()
+ return () => {
+ window.removeEventListener('scroll', scrollTrigger)
+ }
+ }, [])
+
return (
-
+
{ children }
diff --git a/components/TopNav.js b/components/TopNav.js
index b79663fd..b87370a8 100644
--- a/components/TopNav.js
+++ b/components/TopNav.js
@@ -3,14 +3,46 @@ import SideBarDrawer from '@/components/SideBarDrawer'
import { useGlobal } from '@/lib/global'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import Link from 'next/link'
-import { useRef } from 'react'
+import { useCallback, useEffect, useRef } from 'react'
import Image from 'next/image'
import { faBars } from '@fortawesome/free-solid-svg-icons'
+import throttle from 'lodash.throttle'
-const TopNav = ({ tags, currentTag, post, posts, categories, currentCategory }) => {
+let windowTop = 0
+
+/**
+ * 顶部导航
+ * @param {*} param0
+ * @returns
+ */
+const TopNav = ({ tags, currentTag, post, posts, categories, currentCategory, autoHide = true }) => {
const drawer = useRef()
const { locale } = useGlobal()
+ const scrollTrigger = useCallback(throttle(() => {
+ const scrollS = window.scrollY
+ if (scrollS >= windowTop && scrollS > 10) {
+ const nav = document.querySelector('#sticky-nav')
+ nav && nav.classList.replace('top-0', '-top-16')
+ windowTop = scrollS
+ } else {
+ const nav = document.querySelector('#sticky-nav')
+ nav && nav.classList.replace('-top-16', 'top-0')
+ windowTop = scrollS
+ }
+ }, 200))
+
+ // 监听滚动
+ useEffect(() => {
+ if (autoHide) {
+ scrollTrigger()
+ window.addEventListener('scroll', scrollTrigger)
+ }
+ return () => {
+ autoHide && window.removeEventListener('scroll', scrollTrigger)
+ }
+ }, [])
+
return (