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

Howler.js:声音停止检测语法及播放/时长方法使用咨询

Howler.js 音频实例交互实操指南

1. 获取音频标识(实例引用)

Howler.js 没有单独的字符串型音频ID,你创建的Howl实例对象本身就是交互的核心标识。只要在创建时保存这个引用,就能在任意函数里调用它的方法:

// 创建音频实例并保存引用(这就是你的"音频ID")
const myAudio = new Howl({
  src: ['your-audio-file.mp3'],
  autoplay: false
});

2. 使用 playing() 检查播放状态

playing() 方法用来判断音频是否处于播放状态,单实例场景直接调用即可;多实例(同一音频多次播放)时,可传入播放实例ID精准判断:

单实例场景

// 封装检查播放状态的函数
function checkPlayState() {
  if (myAudio.playing()) {
    console.log('音频正在播放');
  } else {
    console.log('音频已暂停或未启动');
  }
}

// 绑定按钮触发检查
document.querySelector('#check-btn').addEventListener('click', checkPlayState);

多实例场景

// 启动一个播放实例并保存其ID
const playInstanceId = myAudio.play();

// 检查该特定实例是否在播放
if (myAudio.playing(playInstanceId)) {
  console.log('这个播放实例正在运行');
}

3. 使用 duration() 获取音频时长

duration() 用于获取音频的总时长(单位:秒),注意要等音频加载完成后调用才能拿到正确值:

基础用法

// 音频加载完成后获取时长
myAudio.on('load', () => {
  const totalDuration = myAudio.duration();
  console.log(`音频总时长:${totalDuration}秒`);
});

// 也可以在播放时获取
myAudio.on('play', () => {
  console.log(`当前音频时长:${myAudio.duration()}秒`);
});

多实例场景

传入播放实例ID同样能获取时长(本质和音频总时长一致):

const playId = myAudio.play();
console.log(`时长:${myAudio.duration(playId)}秒`);

4. 跨函数交互完整示例

比如在一个函数初始化播放,另一个函数控制暂停:

// 全局保存音频实例,方便跨函数访问
let activeAudio;

// 初始化并播放音频
function startAudio() {
  activeAudio = new Howl({
    src: ['bgm.mp3'],
    autoplay: true
  });
}

// 暂停音频的函数
function pauseActiveAudio() {
  // 先判断实例存在且正在播放
  if (activeAudio && activeAudio.playing()) {
    activeAudio.pause();
    console.log('音频已暂停');
  }
}

// 调用示例
startAudio();
// 3秒后自动暂停
setTimeout(pauseActiveAudio, 3000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:01:25