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
相关产品推荐
相关产品推荐

