此方法有效:
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();
};