【发布时间】:2021-05-23 19:38:12
【问题描述】:
我尝试使用 HTML 和 JS 制作节拍器。我知道由于限制,音频无法自动播放(无论如何我都不想要它),所以我在里面放置了一个带有 <source ...> 的 <audio ...> 元素,其中包含所有(我认为?)适当的属性;我使用由按钮单击触发的 JS 控制播放。这适用于我的笔记本电脑,甚至在 XBox Edge 浏览器中,但在 iOS 浏览器(Safari 和 Firefox)上不会播放声音。 HTML 如下所示:
<button id="metronome-button">Start</button>
<audio id="metronome-audio" autoplay="0" autostart="0" loop="0">
<source src="tick.mp3" type="audio/mpeg">
</audio>
JS 看起来是这样的:
const metronomeAudio = document.getElementById('metronome-audio');
const metronomeButton = document.getElementById('metronome-button');
let metronomeInterval = null;
metronomeButton.addEventListener('click', () => {
metronomeInterval = setInterval(() => {
metronomeAudio.loop = false;
metronomeAudio.pause();
metronomeAudio.play();
}, 500);
});
由于这不起作用,我做了更多的查找,并在另一个 StackOverflow 线程中找到了这个解决方案,该线程使用 JS 而根本没有 HTML(除了由按钮的 click 事件触发之外):
function startMetronome () {
setInterval(() => {
let audio = new Audio('tick.mp3');
audio.loop = false;
audio.play();
audio.onended = () => {
audio.remove();
}
}, 500);
}
同样,这适用于各种浏览器的 PC,为什么在 iOS 上特别是会失败? (未在Android上测试,没有设备。)
【问题讨论】:
-
没有。我不想自动播放,所以这无关紧要。 iOS 中的建议以及此处链接的 IBM 文档的许多页面都是生成上述代码的原因。
标签: javascript html5-audio mobile-website