double
pfqgauxfb 2 months ago
parent 5121b71bfc
commit 6d2cd1c295

@ -16,6 +16,12 @@ export default function DocBookmark({ docId }) {
bookmarks[docId] = newState; bookmarks[docId] = newState;
localStorage.setItem('docBookmarks', JSON.stringify(bookmarks)); localStorage.setItem('docBookmarks', JSON.stringify(bookmarks));
setIsBookmarked(newState); setIsBookmarked(newState);
// 触发自定义事件,通知侧边栏更新
const event = new CustomEvent('bookmarkChanged', {
detail: { docId, isBookmarked: newState }
});
window.dispatchEvent(event);
}; };
return ( return (

@ -165,13 +165,13 @@ html[data-theme='dark'] .docusaurus-highlight-code-line {
/* 标记按钮的动画效果 */ /* 标记按钮的动画效果 */
@keyframes bookmarkPulse { @keyframes bookmarkPulse {
0% { 0% {
transform: translateY(-50%) scale(1); transform: scale(1);
} }
50% { 50% {
transform: translateY(-50%) scale(1.1); transform: scale(1.05);
} }
100% { 100% {
transform: translateY(-50%) scale(1); transform: scale(1);
} }
} }

@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import DocSidebarItem from '@theme-original/DocSidebarItem'; import DocSidebarItem from '@theme-original/DocSidebarItem';
import styles from './styles.module.css';
export default function DocSidebarItemWrapper(props) { export default function DocSidebarItemWrapper(props) {
const { item } = props; const { item } = props;
@ -9,15 +10,26 @@ export default function DocSidebarItemWrapper(props) {
if (item.type === 'doc') { if (item.type === 'doc') {
const bookmarks = JSON.parse(localStorage.getItem('docBookmarks') || '{}'); const bookmarks = JSON.parse(localStorage.getItem('docBookmarks') || '{}');
setIsBookmarked(bookmarks[item.docId] || false); setIsBookmarked(bookmarks[item.docId] || false);
// 监听标记变化事件
const handleBookmarkChange = (event) => {
const { docId, isBookmarked: newState } = event.detail;
if (docId === item.docId) {
setIsBookmarked(newState);
}
};
window.addEventListener('bookmarkChanged', handleBookmarkChange);
return () => {
window.removeEventListener('bookmarkChanged', handleBookmarkChange);
};
} }
}, [item]); }, [item]);
if (item.type === 'doc') { if (item.type === 'doc') {
return ( return (
<li className="menu__list-item"> <li className={`menu__list-item ${isBookmarked ? styles.bookmarkedItem : ''}`}>
<div <div className={styles.menuLinkWrapper}>
className={`menu__link-wrapper ${isBookmarked ? 'menu__link--bookmarked' : ''}`}
>
<DocSidebarItem {...props} /> <DocSidebarItem {...props} />
</div> </div>
</li> </li>

@ -0,0 +1,24 @@
.menuLinkWrapper {
position: relative;
}
.bookmarkedItem :global(.menu__link) {
color: var(--ifm-color-primary) !important;
font-weight: 500 !important;
background-color: var(--ifm-color-emphasis-100) !important;
border-left: 3px solid var(--ifm-color-primary) !important;
padding-left: calc(1rem - 3px) !important;
}
.bookmarkedItem :global(.menu__link:hover) {
background-color: var(--ifm-color-emphasis-200) !important;
}
/* 确保样式在深色模式下也生效 */
[data-theme='dark'] .bookmarkedItem :global(.menu__link) {
background-color: var(--ifm-color-emphasis-200) !important;
}
[data-theme='dark'] .bookmarkedItem :global(.menu__link:hover) {
background-color: var(--ifm-color-emphasis-300) !important;
}
Loading…
Cancel
Save