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

JS多音轨播放器实现:播放第二轨前如何先停止当前播放的音轨

修复方案

核心思路是新增全局变量跟踪当前正在播放的音频实例,每次触发新音轨播放前先重置上一个实例的状态。

步骤1:新增全局状态记录

在所有循环逻辑外层定义两个变量,存储当前播放的音频对象和对应的播放器DOM节点:

// 全局记录当前正在播放的音频与对应播放器
let currentPlayingAudio = null;
let currentPlayingPlayer = null;

步骤2:修改播放触发逻辑

在你原有start()函数内的播放按钮点击事件中,新增全局暂停逻辑:

const playBtn = audioPlayer.querySelector('.btn-play');
playBtn.addEventListener('click', () => {
  // 存在其他正在播放的音轨时先暂停重置
  if (currentPlayingAudio && currentPlayingAudio !== audio) {
    currentPlayingAudio.pause();
    currentPlayingAudio.currentTime = 0;
    currentPlayingPlayer.classList.remove('playing');
  }

  // 切换当前音轨播放状态
  if (audio.paused) {
    audio.play();
    currentPlayingAudio = audio;
    currentPlayingPlayer = audioPlayer;
  } else {
    audio.pause();
    currentPlayingAudio = null;
    currentPlayingPlayer = null;
  }
})

步骤3:补充结束回调兜底

修改原有音频播放结束的回调,同步清空全局状态避免错乱:

audio.onended = () => {
  audio.currentTime = 0;
  // 清空对应全局记录
  if (currentPlayingAudio === audio) {
    currentPlayingAudio = null;
    currentPlayingPlayer = null;
  }
};

修改完成后点击任意音轨的播放按钮,会自动停止之前正在播放的音轨,直接启动新选中音轨的播放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:05