javascript – 通过JS重叠播放音频

前端之家收集整理的这篇文章主要介绍了javascript – 通过JS重叠播放音频前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基于画布的游戏的以下JS代码.
var EXPLOSION = "sounds/explosion.wav";

function playSound(str,vol) {
  var snd = new Audio();
  snd.src = str;
  snd.volume = vol;
  snd.play();
}

function createExplosion() {
  playSound(EXPLOSION,0.5);
}

这是有效的,但每次调用时它都会发送一个服务器请求来下载声音文件.或者,如果我事先声明了Audio对象:

var snd = new Audio();
snd.src = EXPLOSION;
snd.volume = 0.5;

function createExplosion() {
  snd.play();
}

这是有效的,但是如果在声音播放完毕之前调用createExplosion函数,它根本不播放声音.这意味着一次只允许声音文件的单个播放 – 并且在发生多次爆炸的情况下,它根本不起作用.

有没有办法正确播放多次与自身重叠的音频文件

解决方法

您可以使用cloneNode()复制节点,并播放复制节点的play().

我的音频元素如下所示:

<audio id="knight-audio" src="knight.ogg" preload="auto"></audio>

我有一个onClick监听器就是这样做的:

function click() {
    const origAudio = document.getElementById("knight-audio");
    const newAudio = origAudio.cloneNode()
    newAudio.play()
}

由于不会显示音频元素,因此您实际上不必将节点附加到任何内容.

我验证了客户端和服务器端,Chrome只尝试下载音频文件一次.

注意事项:我不确定性能影响,因为在我的网站上,这个剪辑的播放次数不超过页面的最大值的40倍.如果你做的事情要大得多,你可能需要清理音频节点吗?

猜你在找的JavaScript相关文章