javascript - 开启循环后如何让<audio>播放

标签 javascript html google-chrome loops audio

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

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

  • Play按钮将音频文件一直播放到最后(直到停止)
  • Loop按钮
  • 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音频播放器的属性,cf. here .如果在按下循环按钮之前当前播放已经结束,您可以重置currentTime就像在您的重播功能中一样,然后播放。

    关于javascript - 开启循环后如何让<audio>播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135489/

    相关文章:

    google-chrome - 打开 Chrome devtool 内存占用疯狂增加

    javascript - 关闭由批处理文件打开的 Chrome 浏览器窗口

    Google Chrome 浏览器中用于 CSS 样式修改的 Javascript

    javascript - 多重赋值 var a = b = b || {} 在 javascript 中

    javascript 创建使用元素

    php - 当我将所有图像设置为 col-6 时,为什么我的图像会位于彼此下方?

    html - CSS 文件未从 AWS S3 加载

    javascript - 在 Angular 指令中参数化数据模型

    javascript - AngularJs ng-if 用于显示或跳过元素

    javascript - 无法将单击事件添加到创建对象后才创建的按钮