如何使<音频>在打开循环后播放

How to make <audio> play after turning on loop

本文关键字:循环 播放 何使 音频      更新时间:2023-09-26

我正在开发一个简单的网络音频播放器。我已经复制并粘贴了下面的HTML和JS,但不能包含音频文件,所以要查看工作示例,请查看GitHub页面:jsejcksn.github.io/audio-player/

一切都像我想要的那样工作,除了我注意到一个问题,它在 Chrome 桌面(OS X 上的 40.0.2214.91)的特定条件下无法播放。我还在 Safari 桌面(OS X 上的 8.0.2)和 iOS 上的 Chrome 上进行了测试,它们在上面运行良好。以下是重现该问题的步骤:

  1. Play按钮将音频文件一直播放到最后(直到停止)
  2. Loop按钮
  3. 按下Play按钮(它无法播放!

我的 JavaScript 有问题吗?(这似乎比Chrome桌面中的错误更有可能,但我不确定。

// Variables ----------
var player = document.getElementById('player');
var btnLoop = document.getElementById('btn-loop');
var btnReplay = document.getElementById('btn-replay');
var btnPlayPause = document.getElementById('btn-play-pause');
// Functions ----------
function endOfAudio() {
	btnPlayPause.innerHTML = 'Play';
	console.log('Music stopped');
	}
function loop() {
	if (player.loop == true) {
		player.loop = false;
		btnLoop.innerHTML = 'Loop';
		console.log('Looping off');
		}
	else if (player.loop == false) {
		player.loop = true;
		btnLoop.innerHTML = 'Turn off Loop';
		console.log('Looping on');
		}
	}
function playPause() {
	if (player.paused == true) {
		player.play();
		btnPlayPause.innerHTML = 'Pause';
		console.log('Music playing');
		}
	else if (player.paused == false) {
		player.pause();
		btnPlayPause.innerHTML = 'Play';
		console.log('Music paused');
		}
	}
function replay() {
	player.currentTime = 0;
	player.play();
	btnPlayPause.innerHTML = 'Pause';
	console.log('Music playing from start');
	}
// EventListeners ----------
btnLoop.addEventListener('click', loop);
btnPlayPause.addEventListener('click', playPause);
btnReplay.addEventListener('click', replay);
player.addEventListener('ended', endOfAudio);
<header>
	<h1>Audio Player</h1>
</header>
<div id="app">
	<audio id="player" controls preload="auto" src="audio/audio.mp3"></audio>
	<button id="btn-replay">Replay</button>
	<button id="btn-play-pause">Play</button>
	<button id="btn-loop">Loop</button>
</div>

尝试检查音频播放器的ended属性,参见此处。如果在按下循环按钮之前当前播放已结束,您可以像在重播功能中一样重置currentTime,然后播放。