增加弹幕上限设置

This commit is contained in:
mtvpls
2026-01-21 11:44:52 +08:00
parent 03a8ead69f
commit 7a8c0b2d29
4 changed files with 154 additions and 1 deletions
+70 -1
View File
@@ -367,6 +367,7 @@ function PlayPageClient() {
>([]);
const [danmakuLoading, setDanmakuLoading] = useState(false);
const [danmakuCount, setDanmakuCount] = useState(0);
const [danmakuOriginalCount, setDanmakuOriginalCount] = useState(0);
const danmakuPluginRef = useRef<any>(null);
const danmakuSettingsRef = useRef(danmakuSettings);
@@ -705,6 +706,22 @@ function PlayPageClient() {
}
}
// 应用弹幕数量限制
const maxCount = typeof window !== 'undefined' ? parseInt(localStorage.getItem('danmakuMaxCount') || '0', 10) : 0;
if (maxCount > 0 && danmakuData.length > maxCount) {
const originalCount = danmakuData.length;
const step = danmakuData.length / maxCount;
const limitedData = [];
for (let i = 0; i < maxCount; i++) {
limitedData.push(danmakuData[Math.floor(i * step)]);
}
danmakuData = limitedData;
setDanmakuOriginalCount(originalCount);
console.log(`弹幕数量限制: 原始 ${originalCount} 条,限制到 ${danmakuData.length}`);
} else {
setDanmakuOriginalCount(0);
}
// 加载弹幕到插件
const currentSettings = danmakuSettingsRef.current;
danmakuPluginRef.current.config({
@@ -3602,6 +3619,22 @@ function PlayPageClient() {
}
}
// 应用弹幕数量限制
const maxCount = typeof window !== 'undefined' ? parseInt(localStorage.getItem('danmakuMaxCount') || '0', 10) : 0;
if (maxCount > 0 && danmakuData.length > maxCount) {
const originalCount = danmakuData.length;
const step = danmakuData.length / maxCount;
const limitedData = [];
for (let i = 0; i < maxCount; i++) {
limitedData.push(danmakuData[Math.floor(i * step)]);
}
danmakuData = limitedData;
setDanmakuOriginalCount(originalCount);
console.log(`弹幕数量限制: 原始 ${originalCount} 条,限制到 ${danmakuData.length}`);
} else {
setDanmakuOriginalCount(0);
}
// 加载弹幕到插件,同时应用当前的弹幕设置
const currentSettings = danmakuSettingsRef.current;
danmakuPluginRef.current.config({
@@ -3634,6 +3667,7 @@ function PlayPageClient() {
episodeTitle: metadata.episodeTitle || '',
searchKeyword: metadata.searchKeyword,
danmakuCount: danmakuData.length,
danmakuOriginalCount: danmakuOriginalCount > 0 ? danmakuOriginalCount : undefined,
});
}
@@ -3801,6 +3835,22 @@ function PlayPageClient() {
});
}
// 应用弹幕数量限制
const maxCount = typeof window !== 'undefined' ? parseInt(localStorage.getItem('danmakuMaxCount') || '0', 10) : 0;
if (maxCount > 0 && danmakuData.length > maxCount) {
const originalCount = danmakuData.length;
const step = danmakuData.length / maxCount;
const limitedData = [];
for (let i = 0; i < maxCount; i++) {
limitedData.push(danmakuData[Math.floor(i * step)]);
}
danmakuData = limitedData;
setDanmakuOriginalCount(originalCount);
console.log(`弹幕数量限制: 原始 ${originalCount} 条,限制到 ${danmakuData.length}`);
} else {
setDanmakuOriginalCount(0);
}
// 加载弹幕到播放器(使用 reset 方法清空,不触发显示/隐藏事件)
if (danmakuPluginRef.current) {
danmakuPluginRef.current.reset();
@@ -4050,6 +4100,22 @@ function PlayPageClient() {
}
}
// 应用弹幕数量限制
const maxCount = typeof window !== 'undefined' ? parseInt(localStorage.getItem('danmakuMaxCount') || '0', 10) : 0;
if (maxCount > 0 && danmakuData.length > maxCount) {
const originalCount = danmakuData.length;
const step = danmakuData.length / maxCount;
const limitedData = [];
for (let i = 0; i < maxCount; i++) {
limitedData.push(danmakuData[Math.floor(i * step)]);
}
danmakuData = limitedData;
setDanmakuOriginalCount(originalCount);
console.log(`弹幕数量限制: 原始 ${originalCount} 条,限制到 ${danmakuData.length}`);
} else {
setDanmakuOriginalCount(0);
}
// 加载弹幕到插件
const currentSettings = danmakuSettingsRef.current;
danmakuPluginRef.current.config({
@@ -7107,7 +7173,10 @@ function PlayPageClient() {
/>
</svg>
<span className='text-sm font-medium text-green-400'>
{danmakuCount}
{danmakuOriginalCount > 0
? `已加载 ${danmakuCount} 条弹幕(原始 ${danmakuOriginalCount} 条)`
: `已加载 ${danmakuCount} 条弹幕`
}
</span>
</>
) : (