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

Howler JS是否支持按指定时间间隔触发通知以更新播放时长?

Howler JS是否支持按指定间隔触发回调以追踪播放时长?

用户目前通过手动设置定时器实现播放时长追踪,代码如下:

var sound = new Howl({
  xhr: {
    method: 'POST',
    headers: {
      Authorization: 'Access-Control-Allow-Origin:*',
    },
    withCredentials: true,
  },
  //  autoplay: true,
  loop: true,
  volume: 1,
  format: ['mp3'],
  src: [mp3],
});
sound.play();
let position: number = 0;
const s = interval(1000).subscribe((v) => {
  console.log(v);
  if (!sound.playing()) {
    s.unsubscribe();
  }
  position = sound.seek();
  console.log(position);
});

好奇Howler是否提供类似如下的内置方法,在歌曲播放期间按指定间隔调用回调:

const interval = 1000;
song.on(interval, callback)

回答

Howler JS没有直接提供按指定时间间隔触发回调的内置方法,也就是你设想的song.on(interval, callback)这种形式不存在。

不过你可以利用Howler自带的播放状态事件(比如play、pause、stop)来更优雅地管理定时器,替代手动判断播放状态的逻辑,避免定时器在音频暂停/停止后无效运行:

优化实现示例

var sound = new Howl({
  xhr: {
    method: 'POST',
    headers: {
      Authorization: 'Access-Control-Allow-Origin:*',
    },
    withCredentials: true,
  },
  loop: true,
  volume: 1,
  format: ['mp3'],
  src: [mp3],
  onplay: function() {
    // 播放开始时启动定时器
    this._interval = setInterval(() => {
      const position = sound.seek();
      console.log('当前播放位置:', position);
      // 在此处更新你的播放时长状态变量
    }, 1000);
  },
  onpause: function() {
    // 暂停时清除定时器
    clearInterval(this._interval);
  },
  onstop: function() {
    // 停止时清除定时器
    clearInterval(this._interval);
  },
  onend: function() {
    // 非循环模式下音频结束时清除定时器
    clearInterval(this._interval);
  }
});

sound.play();

方案优势

  • 无需手动判断sound.playing(),依靠Howler原生事件自动启停定时器,逻辑更可靠
  • 避免定时器在音频状态变化后仍无效运行的资源浪费
  • 代码结构贴合Howler的事件驱动设计,更易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:10:04