diff --git a/package.json b/package.json
index 4dc4f749..adc8d380 100644
--- a/package.json
+++ b/package.json
@@ -69,7 +69,7 @@
"eslint-plugin-react": "^7.23.2",
"next-sitemap": "^1.6.203",
"postcss": "^8.4.20",
- "tailwindcss": "^3.2.4",
+ "tailwindcss": "^3.3.2",
"webpack-bundle-analyzer": "^4.5.0"
},
"resolutions": {
diff --git a/themes/plog/components/BlogListPage.js b/themes/plog/components/BlogListPage.js
index f8455ae7..1ac57222 100644
--- a/themes/plog/components/BlogListPage.js
+++ b/themes/plog/components/BlogListPage.js
@@ -4,6 +4,7 @@ import { useGlobal } from '@/lib/global'
import { useRouter } from 'next/router'
import Link from 'next/link'
import BlogPost from './BlogPost'
+import { useEffect, useRef } from 'react'
export const BlogListPage = props => {
const { page = 1, posts, postCount } = props
@@ -16,12 +17,33 @@ export const BlogListPage = props => {
const showNext = page < totalPage
const pagePrefix = router.asPath.split('?')[0].replace(/\/page\/[1-9]\d*/, '').replace(/\/$/, '')
+ const blogPostRefs = useRef([])
+
+ useEffect(() => {
+ const observer = new IntersectionObserver(entries => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.classList.toggle('visible')
+ }
+ })
+ }, {
+ threshold: 0.1 // 调整阈值以达到最佳效果
+ })
+
+ blogPostRefs.current.forEach(ref => {
+ observer.observe(ref)
+ })
+
+ return () => {
+ observer.disconnect()
+ }
+ }, [])
return (
- {posts?.map(post => (
-
+ {posts?.map((post, index) => (
+ blogPostRefs.current.push(el)}/>
))}
diff --git a/themes/plog/components/BlogPost.js b/themes/plog/components/BlogPost.js
index 4f7c9bce..65eacc4c 100644
--- a/themes/plog/components/BlogPost.js
+++ b/themes/plog/components/BlogPost.js
@@ -1,6 +1,7 @@
import { compressImage } from '@/lib/notion/mapImage'
import Link from 'next/link'
import { usePlogGlobal } from '..'
+import { isMobile } from '@/lib/utils'
/**
* 博客照片卡牌
@@ -8,16 +9,24 @@ import { usePlogGlobal } from '..'
* @returns
*/
const BlogPost = (props) => {
- const { post, siteInfo } = props
+ const { post, index, siteInfo } = props
const pageThumbnail = compressImage(post?.pageCoverThumbnail || siteInfo?.pageCover, 800, 80)
const { setModalContent, setShowModal } = usePlogGlobal()
const handleClick = () => {
setShowModal(true)
setModalContent(post)
}
+
+ // 实现动画 一个接一个出现
+ let delay = index * 100
+ if (isMobile()) {
+ delay = 0
+ }
+
return (
-
{modalContent?.title}
+ {modalContent?.title}
-
+
{modalContent?.summary}
diff --git a/themes/plog/components/Nav.js b/themes/plog/components/Nav.js
index 52d2a09e..6fdd2709 100644
--- a/themes/plog/components/Nav.js
+++ b/themes/plog/components/Nav.js
@@ -8,9 +8,9 @@ import { MenuItemDrop } from './MenuItemDrop'
import Collapse from '@/components/Collapse'
import { MenuItemCollapse } from './MenuItemCollapse'
-const Nav = props => {
+const Header = props => {
const { navBarTitle, fullWidth, siteInfo } = props
- return
+ return
@@ -90,4 +90,4 @@ const NavBar = props => {
)
}
-export default Nav
+export default Header
diff --git a/themes/plog/index.js b/themes/plog/index.js
index bf6570cc..007004a9 100644
--- a/themes/plog/index.js
+++ b/themes/plog/index.js
@@ -1,7 +1,7 @@
import CONFIG from './config'
import CommonHead from '@/components/CommonHead'
import React, { createContext, useContext, useEffect, useState } from 'react'
-import Nav from './components/Nav'
+import Header from './components/Nav'
import { useGlobal } from '@/lib/global'
import BLOG from '@/blog.config'
@@ -65,7 +65,7 @@ const LayoutBase = props => {
{/* 移动端顶部导航栏 */}
-
+
{/* 主区 */}
@@ -179,7 +179,7 @@ const LayoutSlug = props => {
{lock && }
- {!lock &&