此方法有效:
audio.pause();
audio.currentTime = 0;
但是,如果您不想每次停止音频时都编写这两行代码,您可以做两件事之一。我认为第二个更合适,我不确定为什么“javascript 标准之神”没有制定这个标准。
第一种方法:创建一个函数并传递音频
function stopAudio(audio) {
audio.pause();
audio.currentTime = 0;
}
//then using it:
stopAudio(audio);
第二种方法(首选):扩展 Audio 类:
Audio.prototype.stop = function() {
this.pause();
this.currentTime = 0;
};
我在一个名为“AudioPlus.js”的javascript文件中有这个,我在我的html中包含在任何将处理音频的脚本之前。
然后你可以在音频对象上调用 stop 函数:
audio.stop();
最后一个带有“canplaythrough”的铬问题:
我没有在所有浏览器中测试过这个,但这是我在 Chrome 中遇到的一个问题。如果您尝试在附加了“canplaythrough”事件侦听器的音频上设置 currentTime,那么您将再次触发该事件,这可能会导致不良结果。
因此,与您附加了一个您确实想确保它不会再次触发的事件侦听器的所有情况类似,解决方案是在第一次调用后删除事件侦听器。像这样的东西:
//note using jquery to attach the event. You can use plain javascript as well of course.
$(audio).on("canplaythrough", function() {
$(this).off("canplaythrough");
// rest of the code ...
});
奖金:
请注意,您可以向 Audio 类(或任何本机 javascript 类)添加更多自定义方法。
例如,如果您想要一个重新启动音频的“重新启动”方法,它可能看起来像:
Audio.prototype.restart= function() {
this.pause();
this.currentTime = 0;
this.play();
};