可直接用 localstorage 保存弹幕配置项(如显隐、透明度、字体大小、位置偏移、过滤模式),页面加载时读取并还原 ui,需统一配置结构、及时持久化、做好容错处理。

可以直接用 localStorage 保存弹幕区域的显隐状态、透明度、字体大小、位置偏移等配置项,刷新页面后读取并还原 UI。关键在于统一配置结构、及时持久化、容错处理。
定义可保存的弹幕配置项
通常包括以下常用设置,建议用一个对象集中管理:
- showDanmaku:布尔值,控制弹幕是否显示
- opacity:数字(0.1–1),弹幕整体透明度
-
fontSize:字符串如
"16px"或数字16 - positionOffsetTop:数字,弹幕区域距顶部的像素偏移(用于避开标题栏)
-
filterMode:字符串,如
"all"/"top"/"bottom",控制只显示某类弹幕
保存配置:监听用户操作并写入 localStorage
在用户调整设置时立即保存,例如:
// 示例:切换弹幕显隐
document.getElementById('toggle-danmaku').addEventListener('change', (e) => {
const config = JSON.parse(localStorage.getItem('danmakuConfig') || '{}');
config.showDanmaku = e.target.checked;
localStorage.setItem('danmakuConfig', JSON.stringify(config));
});
// 示例:调节透明度滑块
document.getElementById('opacity-slider').addEventListener('input', (e) => {
const config = JSON.parse(localStorage.getItem('danmakuConfig') || '{}');
config.opacity = parseFloat(e.target.value);
localStorage.setItem('danmakuConfig', JSON.stringify(config));
});
读取并应用配置:页面加载时初始化 UI
在播放器初始化阶段(如 DOM 加载完成或视频加载就绪后)读取并设置:
function loadDanmakuConfig() {
try {
const saved = localStorage.getItem('danmakuConfig');
const config = saved ? JSON.parse(saved) : {};
// 合理默认值兜底
const finalConfig = {
showDanmaku: config.showDanmaku !== false, // 默认 true
opacity: Math.max(0.2, Math.min(1, config.opacity || 0.8)),
fontSize: config.fontSize || '16px',
positionOffsetTop: config.positionOffsetTop || 0,
filterMode: config.filterMode || 'all'
};
// 应用到 DOM 元素
document.querySelector('.danmaku-area').style.opacity = finalConfig.opacity;
document.querySelector('.danmaku-area').style.fontSize = finalConfig.fontSize;
document.querySelector('.danmaku-area').style.top = finalConfig.positionOffsetTop + 'px';
document.getElementById('toggle-danmaku').checked = finalConfig.showDanmaku;
// 触发弹幕渲染逻辑(如隐藏/显示容器)
if (!finalConfig.showDanmaku) {
document.querySelector('.danmaku-area').classList.add('hidden');
} else {
document.querySelector('.danmaku-area').classList.remove('hidden');
}
return finalConfig;
} catch (e) {
console.warn('读取弹幕配置失败,使用默认值', e);
return { showDanmaku: true, opacity: 0.8, fontSize: '16px', positionOffsetTop: 0, filterMode: 'all' };
}
}
// 调用
const danmakuConfig = loadDanmakuConfig();
进阶建议:避免常见坑点
注意浏览器限制与兼容性:
- LocalStorage 只支持字符串,务必用
JSON.stringify()和JSON.parse()处理对象 - 同源策略下才能读写,HTTP 与 HTTPS、www 与非 www 均视为不同源
- 移动端 Safari 在无痕模式下会抛出 QuotaExceededError,需加
try/catch - 配置项变更时,建议加版本字段(如
v: "1.0"),便于未来格式升级时迁移旧数据 - 若弹幕区域由第三方库(如 dplayer、bilibili-player)管理,优先查阅其是否提供配置持久化钩子,避免直接操作 DOM 冲突
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











