You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

点击STOP按钮无法完全终止setInterval循环播放的音频问题求助

如何完全停止循环触发的音频播放?

我明白你的问题了——点击STOP按钮后音频只是短暂暂停,很快又会继续播放对吧?这是因为你用了setInterval每隔500毫秒就自动调用一次play()方法,哪怕你暂停了音频,定时器到点还是会重新触发播放。

要彻底解决这个问题,你需要做两件核心操作:

  • 清除那个一直在触发播放的定时器,切断自动播放的源头
  • 不仅暂停音频,还可以把播放进度重置到开头(优化体验,避免下次播放从暂停位置继续)

下面是修改后的完整代码,我标了关键改动点:

// 先把定时器的引用存起来,这样后面才能找到并清除它
let audioTimer;
let x = 500;

$("#buttonStart").click(()=>{
  // 启动新定时器前先清除旧的,防止多次点击Start创建多个并行定时器
  clearInterval(audioTimer);
  audioTimer = setInterval(function() {
    $('audio')[0].play();
  }, x); 
})

$("#buttonStop").click(()=>{
  // 第一步:彻底清除定时器,停止自动播放的触发
  clearInterval(audioTimer);
  // 第二步:暂停当前音频播放
  $('audio')[0].pause();
  // 第三步:把播放进度重置到开头(可选,但能让停止状态更直观)
  $('audio')[0].currentTime = 0;
})

改动细节说明:

  • 新增audioTimer变量存储定时器ID:setInterval会返回一个唯一ID,只有通过这个ID才能用clearInterval停止定时器,这是解决问题的核心
  • Start按钮添加前置清除逻辑:避免用户多次点击Start导致多个定时器同时运行,出现音频播放混乱的情况
  • Stop按钮的三步操作:先切断自动播放的触发源,再暂停音频,最后重置播放位置,确保音频完全停止且不会自行恢复

内容的提问来源于stack exchange,提问作者Sehmim al haque

火山引擎 最新活动