From 87cad0e3b6dd37a39308f100b5bbc472cc541945 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Wed, 21 Jan 2026 12:06:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A6=81=E7=94=A8=E5=BC=B9?= =?UTF-8?q?=E5=B9=95=E7=83=AD=E5=8A=9B=E5=9B=BE=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/play/page.tsx | 6 ++--- src/components/UserMenu.tsx | 48 ++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/app/play/page.tsx b/src/app/play/page.tsx index eac5e03..6c9c661 100644 --- a/src/app/play/page.tsx +++ b/src/app/play/page.tsx @@ -4965,8 +4965,8 @@ function PlayPageClient() { return '打开设置'; }, }, - // 热力图开关(始终显示,不再依赖 danmakuHeatmapDisabled) - { + // 热力图开关(仅在未禁用时显示) + ...(!danmakuHeatmapDisabledRef.current ? [{ name: '弹幕热力', html: '弹幕热力', icon: '', @@ -4982,7 +4982,7 @@ function PlayPageClient() { } return newVal; }, - }, + }] : []), ...(webGPUSupported ? [ { name: 'Anime4K超分', diff --git a/src/components/UserMenu.tsx b/src/components/UserMenu.tsx index 0d8266d..16fcbc8 100644 --- a/src/components/UserMenu.tsx +++ b/src/components/UserMenu.tsx @@ -115,6 +115,7 @@ export const UserMenu: React.FC = () => { const [nextEpisodeDanmakuPreload, setNextEpisodeDanmakuPreload] = useState(true); const [disableAutoLoadDanmaku, setDisableAutoLoadDanmaku] = useState(false); const [danmakuMaxCount, setDanmakuMaxCount] = useState(0); + const [danmakuHeatmapDisabled, setDanmakuHeatmapDisabled] = useState(false); const [searchTraditionalToSimplified, setSearchTraditionalToSimplified] = useState(false); // 邮件通知设置 @@ -411,15 +412,12 @@ export const UserMenu: React.FC = () => { const savedDanmakuMaxCount = localStorage.getItem('danmakuMaxCount'); if (savedDanmakuMaxCount !== null) { - const value = parseInt(savedDanmakuMaxCount, 10); - // 兼容旧版本的0-4映射值 - if (value <= 4) { - const mappedValue = value === 0 ? 0 : value === 1 ? 1000 : value === 2 ? 3000 : value === 3 ? 5000 : 10000; - setDanmakuMaxCount(mappedValue); - localStorage.setItem('danmakuMaxCount', String(mappedValue)); - } else { - setDanmakuMaxCount(value); - } + setDanmakuMaxCount(parseInt(savedDanmakuMaxCount, 10)); + } + + const savedDanmakuHeatmapDisabled = localStorage.getItem('danmaku_heatmap_disabled'); + if (savedDanmakuHeatmapDisabled !== null) { + setDanmakuHeatmapDisabled(savedDanmakuHeatmapDisabled === 'true'); } // 加载首页模块配置 @@ -792,6 +790,13 @@ export const UserMenu: React.FC = () => { } }; + const handleDanmakuHeatmapDisabledToggle = (value: boolean) => { + setDanmakuHeatmapDisabled(value); + if (typeof window !== 'undefined') { + localStorage.setItem('danmaku_heatmap_disabled', String(value)); + } + }; + const handleSearchTraditionalToSimplifiedToggle = (value: boolean) => { setSearchTraditionalToSimplified(value); if (typeof window !== 'undefined') { @@ -912,6 +917,7 @@ export const UserMenu: React.FC = () => { localStorage.setItem('nextEpisodeDanmakuPreload', 'true'); localStorage.setItem('disableAutoLoadDanmaku', 'false'); localStorage.setItem('danmakuMaxCount', '0'); + localStorage.setItem('danmaku_heatmap_disabled', 'false'); localStorage.setItem('homeModules', JSON.stringify(defaultHomeModules)); localStorage.setItem('searchTraditionalToSimplified', 'false'); window.dispatchEvent(new CustomEvent('homeModulesUpdated')); @@ -1900,6 +1906,30 @@ export const UserMenu: React.FC = () => { + {/* 禁用弹幕热力图 */} +
+
+

+ 禁用弹幕热力图 +

+

+ 开启后不显示弹幕热力图和热力图开关 +

+
+ +
+ {/* 弹幕加载上限 */}