And*_*tro 2 html javascript audio function playback
我有这个 JavaScript 函数:
\nvar currentPlayer;\nfunction EvalSound(soundobj) {\n var thissound = document.getElementById(soundobj);\n if (currentPlayer && currentPlayer != thissound) {\n currentPlayer.pause(); \n }\n if (thissound.paused) {\n thissound.play();\n } else {\n thissound.pause();\n }\n thissound.currentTime = 0;\n currentPlayer = thissound;\n}\nRun Code Online (Sandbox Code Playgroud)\n这个 html5 音频播放器在 Yii2 的 Gridview 小部件内循环重复(它创建了许多播放器,每个播放器都有不同的歌曲):
\n'value'=> function ($data){ \n return "<audio controls>\n <source src='" . $data->ficheiro . "' type='audio/mp3' />\n </audio>";\n},\nRun Code Online (Sandbox Code Playgroud)\n问题是,当我正在播放一个音频标签并单击另一个音频标签的播放按钮时,它不会停止前一个正在播放的音频标签并开始新的音频标签。两个音频标签同时播放。我正在尝试调整 javascript 函数,但它不起作用。
\n我也尝试过声明var thisound = $('audio');
它也不起作用。
\n我需要在音频标签中添加 ID 吗?\n我需要将onClick='EvalSound'事件与音频标签关联吗?
好的,我是这样解决的:
抓取addEventListener开始播放的音频,for循环暂停所有其他音频标签。
document.addEventListener('play', function(e) {
var audios = document.getElementsByTagName('audio');
for (var i = 0, len = audios.length; i < len; i++) {
if (audios[i] != e.target) {
audios[i].pause();
}
}
}, true);
Run Code Online (Sandbox Code Playgroud)