You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS音频播放器如何添加Cookie实现静音状态跨页面记忆

跨页面记忆音频静音状态实现方案

核心逻辑是通过Cookie持久化存储用户的静音选择,页面初始化时优先读取Cookie配置渲染按钮状态、控制音频播放行为,用户切换静音状态时同步更新Cookie值,保证全站页面配置统一。


第一步:新增Cookie读写工具方法

不需要引入第三方依赖,直接在JS开头加两个极简工具函数,支持Cookie的写入和读取,配置path=/保证全站所有页面都能访问到该Cookie:

// 写入Cookie
function setCookie(name, value, days = 30) {
  const expireTime = new Date();
  expireTime.setTime(expireTime.getTime() + days * 24 * 60 * 60 * 1000);
  document.cookie = `${name}=${value};expires=${expireTime.toUTCString()};path=/`;
}
// 读取Cookie
function getCookie(name) {
  const targetKey = `${name}=`;
  const cookieList = document.cookie.split(';');
  for (let i = 0; i < cookieList.length; i++) {
    let item = cookieList[i].trim();
    if (item.indexOf(targetKey) === 0) return item.substring(targetKey.length);
  }
  return null;
}

默认Cookie有效期30天,需要调整记忆时长直接修改setCookie的days参数即可


第二步:修改音频初始化逻辑

把原来直接调用radio.play()的逻辑替换为读取Cookie判断的分支逻辑:如果用户之前设置过静音,默认加载静音图标、音频设为静音、不自动播放;如果没有静音记录,默认开启声音、自动播放:

const radio = new Audio();
radio.src = "https://site.dvasyl.com/wp-content/uploads/2022/05/preview.mp3";
radio.loop = true;

const muteBtn = document.querySelector('#muted');
const soundOnIcon = '<img class="size_sound_alert" src="https://site.dvasyl.com/wp-content/uploads/2022/05/sound_on-5.svg" alt="声音开启" />';
const soundOffIcon = '<img class="size_sound_alert" src="https://site.dvasyl.com/wp-content/uploads/2022/05/sound_off-1.svg" alt="声音关闭" />';

// 页面初始化读取Cookie配置
const savedMuteStatus = getCookie('isRadioMuted');
if (savedMuteStatus === 'true') {
  // 记忆为静音状态:设为静音、渲染静音图标、不自动播放
  radio.muted = true;
  muteBtn.innerHTML = soundOffIcon;
} else {
  // 无静音记录/记忆为开启状态:设为非静音、渲染开启图标、自动播放
  radio.muted = false;
  muteBtn.innerHTML = soundOnIcon;
  radio.play().catch(err => {
    // 捕获浏览器自动播放限制报错,不影响功能
    console.log('自动播放被浏览器拦截,需用户手动点击开启', err);
  });
}

第三步:修改按钮点击事件

每次用户点击切换静音状态时,把最新的静音状态写入Cookie,保证后续跳转页面能读到最新配置:

muteBtn.onclick = function() {
  if (radio.muted) {
    // 从静音切到开启
    muteBtn.innerHTML = soundOnIcon;
    radio.muted = false;
    // 之前暂停的话手动触发播放
    if (radio.paused) radio.play();
  } else {
    // 从开启切到静音
    muteBtn.innerHTML = soundOffIcon;
    radio.muted = true;
    radio.pause();
  }
  // 同步更新Cookie
  setCookie('isRadioMuted', radio.muted);
}

原有CSS和HTML无需修改

原有样式和DOM结构可以直接保留,JS初始化时会自动覆盖按钮的默认图标,不会出现图标和状态不匹配的问题:

.size_sound_alert{
    width: 30px;
}

.sound_label{
    position: fixed;
    margin-bottom: %;
    margin-left: 95%;
    top: 90%;
    z-index: 9999;
    cursor: pointer;
}

@media screen and (max-width: 768px) {
    .sound_label {
        position: fixed;
        margin-bottom: %;
        margin-left: 85%;
        top: 90%;
    }
}

额外给按钮加了cursor: pointer优化交互体验,不需要可以删掉

<div id="muted" class="sound_label">
  <img class="size_sound_alert" src="https://site.dvasyl.com/wp-content/uploads/2022/05/sound_on-5.svg" alt="Off" />
</div>

内容的提问来源于stack exchange,提问作者vasiliy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 11:31:11