diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx index 91d3126..4f2635e 100644 --- a/src/app/play/page.tsx +++ b/src/app/play/page.tsx @@ -607,6 +607,13 @@ function PlayPageClient() { return; } + // 检查是否禁用了自动装填弹幕 + const disableAutoLoad = localStorage.getItem('disableAutoLoadDanmaku') === 'true'; + if (disableAutoLoad) { + console.log('[弹幕] 已禁用自动装填弹幕,跳过自动加载'); + return; + } + // 检查集数是否有效且是否已改变 if (currentEpisodeIndex < 0 || !videoTitle) { return; @@ -3644,6 +3651,9 @@ function PlayPageClient() { // 预加载下一集弹幕(完全复制 loadDanmakuForCurrentEpisode 的逻辑) const preloadNextEpisodeDanmaku = async () => { try { + const disableAutoLoad = localStorage.getItem('disableAutoLoadDanmaku') === 'true'; + if (disableAutoLoad) return; + const title = videoTitleRef.current; if (!title) { return; @@ -3970,6 +3980,9 @@ function PlayPageClient() { // 自动搜索并加载弹幕 const autoSearchDanmaku = async () => { + const disableAutoLoad = localStorage.getItem('disableAutoLoadDanmaku') === 'true'; + if (disableAutoLoad) return; + const title = videoTitleRef.current; if (!title) { console.warn('视频标题为空,无法自动搜索弹幕'); diff --git a/src/components/UserMenu.tsx b/src/components/UserMenu.tsx index 221794f..c23a0f3 100644 --- a/src/components/UserMenu.tsx +++ b/src/components/UserMenu.tsx @@ -113,6 +113,7 @@ export const UserMenu: React.FC = () => { const [bufferStrategy, setBufferStrategy] = useState('medium'); const [nextEpisodePreCache, setNextEpisodePreCache] = useState(true); const [nextEpisodeDanmakuPreload, setNextEpisodeDanmakuPreload] = useState(true); + const [disableAutoLoadDanmaku, setDisableAutoLoadDanmaku] = useState(false); const [searchTraditionalToSimplified, setSearchTraditionalToSimplified] = useState(false); // 邮件通知设置 @@ -402,6 +403,11 @@ export const UserMenu: React.FC = () => { setNextEpisodeDanmakuPreload(savedNextEpisodeDanmakuPreload === 'true'); } + const savedDisableAutoLoadDanmaku = localStorage.getItem('disableAutoLoadDanmaku'); + if (savedDisableAutoLoadDanmaku !== null) { + setDisableAutoLoadDanmaku(savedDisableAutoLoadDanmaku === 'true'); + } + // 加载首页模块配置 const savedHomeModules = localStorage.getItem('homeModules'); if (savedHomeModules !== null) { @@ -758,6 +764,13 @@ export const UserMenu: React.FC = () => { } }; + const handleDisableAutoLoadDanmakuToggle = (value: boolean) => { + setDisableAutoLoadDanmaku(value); + if (typeof window !== 'undefined') { + localStorage.setItem('disableAutoLoadDanmaku', String(value)); + } + }; + const handleSearchTraditionalToSimplifiedToggle = (value: boolean) => { setSearchTraditionalToSimplified(value); if (typeof window !== 'undefined') { @@ -857,6 +870,7 @@ export const UserMenu: React.FC = () => { setBufferStrategy('medium'); setNextEpisodePreCache(true); setNextEpisodeDanmakuPreload(true); + setDisableAutoLoadDanmaku(false); setHomeModules(defaultHomeModules); setSearchTraditionalToSimplified(false); @@ -875,6 +889,7 @@ export const UserMenu: React.FC = () => { localStorage.setItem('bufferStrategy', 'medium'); localStorage.setItem('nextEpisodePreCache', 'true'); localStorage.setItem('nextEpisodeDanmakuPreload', 'true'); + localStorage.setItem('disableAutoLoadDanmaku', 'false'); localStorage.setItem('homeModules', JSON.stringify(defaultHomeModules)); localStorage.setItem('searchTraditionalToSimplified', 'false'); window.dispatchEvent(new CustomEvent('homeModulesUpdated')); @@ -1814,6 +1829,30 @@ export const UserMenu: React.FC = () => { {isDanmakuSectionOpen && (
+ 开启后,播放页面不会自动匹配弹幕,只能手动匹配 +
+