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

JavaScript中Audio对象.pause()函数无法生效的求助

问题诊断与解决

你的问题核心原因是每次点击按钮都会创建全新的Audio实例:

  • 第一次点击时,创建Audio实例并调用play(),音频正常播放;
  • 第二次点击时,你重新执行new Audio(...)生成了一个未播放的新实例,调用它的pause()不会影响到之前正在后台播放的那个音频,而原实例因为没有被引用会持续播放,最终出现按钮状态切换正常但音频停不下来的现象。

修复方案

将Audio实例的声明移到点击事件逻辑外部,确保整个交互复用同一个音频对象:

// 把Audio实例和状态变量放在外部,避免每次点击都重建
let audio;
let isPlaying = false;

// 按钮点击事件处理函数
function togglePlay(song_number) {
  // 首次播放或切换歌曲时,才创建/更新Audio实例
  if (!audio || audio.src !== songs[song_number].link) {
    audio = new Audio(songs[song_number].link);
  }

  if (isPlaying) {
    audio.pause();
    audio.currentTime = 0; // 可选:重置播放进度
    document.getElementById(`playButton${song_number}`).src = "./extern_media/playbutton.png";
    document.getElementById(`playButton${song_number}`).width = "80";
    isPlaying = false;
  } else {
    audio.play();
    document.getElementById(`playButton${song_number}`).src = "./extern_media/pausebutton.png";
    document.getElementById(`playButton${song_number}`).width = "50";
    isPlaying = true;
  }
}

额外优化提示

  • 若支持多歌曲切换,切换时记得先暂停当前音频再更新实例;
  • 可给audio实例添加ended事件监听,播放结束后自动重置按钮状态和isPlaying变量,避免状态不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:15:31