javascript - 音频标签,播放请求被新的加载请求中断

标签 javascript jquery html audio

在我的贪吃蛇游戏中,我有一个播放 sfx 的音频标签。当吃到食物时,下面会播放“食物”声音。然后它会产生一种新食物,如果它的值(value)为 200 分,它会发出一种名为“食物 200”的声音。问题是,因为它立即生成,“Food200”音频将加载,而“Food”音频仍在播放/加载,从而出现此错误

if (Audio == "Food") {
var audio = document.getElementById('SFX');
audio.src = 'audio/Food.mp3';
audio.load();
audio.play();
}

if (Audio == "Food200") {
var audio = document.getElementById('SFX');
audio.src = 'audio/Food200.mp3';
audio.load();
audio.play();
}

我尝试过“$("SFX").remove();”在我的音频标签上,也尝试暂停它,但这不起作用,我仍然收到错误,有更好的方法吗?

最佳答案

如果您需要同时允许多种音效,我建议为每个音频文件制作一个音频标签,例如;

//Js
if (Audio === "Food") {
  audioFood.play();
}

if (Audio === "Food200") {
  audioFood200.play();
}

//HTML
<audio id="audioFood" src="./audio/Food.mp3"></audio>
<audio id="audioFood200" src="./audio/Food200.mp3"></audio>

如果您只想要一个音频标签,另一个选择是创建一个“超时”时间戳,每次播放音效时检查并更新;

var audioTimeout = +new Date(); // +new turns the date into a MS timestamp.

if (Audio === "Food") {

  var dateNow = +new Date(); 
   if(audioTimeout - dateNow > 0) return;
   else audioTimeout = dateNow + (Food.mp3 length in MS);

  var audio = document.getElementById('SFX');
  audio.src = 'audio/Food.mp3';
  audio.load();
  audio.play();
}

关于javascript - 音频标签,播放请求被新的加载请求中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969695/

相关文章:

javascript - 递归迭代器的最大调用堆栈大小错误

c# - 带有图像和标签的 MVC Razor 下拉列表?

php - 如何使用php中的while循环概念获取另一个页面中的单选按钮值

java - 下一个按钮不增加变量 JSP

javascript - 我在向 CSS 中的文本框添加文本时遇到问题

javascript - 使用 addEventListener 在函数中添加事件作为参数(在 Firefox/IE 中不起作用)

javascript - JQuery 选择插件 - 返回 "Select an option"

javascript - 这是 javascript Closure 的候选者吗?

javascript - 有没有办法通过 jQuery 获取 CSS chop 文本?

html - 使用 CSS 强制元素中的单行文本填充宽度