javascript - 循环播放时音频无法通过 JavaScript 播放
问题描述
我有一段 JavaScript 应该循环遍历一些音频文件,这些音频文件是使用 HTML 正文中带有 id 的音频标签定义的。问题是音频最初会在前 3 秒内停止,现在根本不播放,我找不到问题所在。以下代码全部在 HTML 正文中,是我的错误的最小可能示例:
<audio id="lobby1">
<source src="audio/lobby-audio1.mp3" type="audio/mpeg">
</audio>
<audio id="lobby2">
<source src="audio/lobby-audio2.mp3" type="audio/mpeg">
</audio>
<button onclick="playLobby()">play lobby</button>
<script>
number = 1
lobbySong = "lobby" + number
function playLobby() {
while (number < 2) {
var lobbySong = document.getElementById(lobbySong);
lobbySong.play();
lobbySong.onended = function() {
number++
};
}
}
</script>
我从控制台得到的错误是cannot read property 'play' of null
指lobbySong.play
在while循环中。
解决方案
尝试像这样重写javascript
function playLobby() {
let fn = function(number) {
let lobbySong = "lobby" + number;
let audio = document.getElementById(lobbySong);
audio.play();
audio.onended = function () {
if (number < 2) {
fn(number + 1);
}
}
};
fn(1);
}
推荐阅读
- amazon-web-services - Terraform 模块 - 输出变量作为另一个模块的输入
- qt - Qt 根据平台排除子目录项目
- python - 如何使列表保存为可迭代类中的属性?
- java - 从 wsdl url 生成类 java - 返回错误 401
- html - CSS - 两个表之间的列对齐是不可能的并且列大小是相同的
- bash - 如何将 foo='bar baz' 从 cli 参数传递给命令
- c# - NETSDK1045 当前的 .NET SDK 不支持面向 .NET Core 3.1 - 由缓存引起?
- ruby-on-rails - RSpec 请求规范没有为发布请求传递参数
- asp.net-core - 如何在 asp.net core 3.1 的同一会话中设置不同的通用列表值
- kubernetes - Nginx 入口路由问题