如何使用JavaScript API检查HTML5音频元素是否正在播放?
如何使用JavaScript API检查HTML5音频元素是否正在播放?
paused
属性表示媒体元素是否已暂停。该属性必须最初为 true"。也许@Harry和@Tomas在2012年发现这不是属实的,因为当时规范并不明确。但是... 我在规范中没找到任何东西(不是说没有!)说明'paused`属性在播放结束时必须为true。你们有什么看法? - Matt Wallis您可以检查持续时间。 如果持续时间超过0秒并且未被暂停,则正在播放。
var myAudio = document.getElementById('myAudioID');
if (myAudio.duration > 0 && !myAudio.paused) {
//Its playing...do your job
} else {
//Not playing...maybe paused, stopped or never played.
}
!myAudio.paused||!myAudio.currentTime
会做得更好。 - m93a!myAudio.paused || myAudio.currentTime
吗? - MalcolmOcean!myAudio.paused || myAudio.currentTime
。似乎没有回复过来…… - Parth虽然我在这个线程上很晚,但我使用这个实现来判断声音是否正在播放:
service.currentAudio = new Audio();
var isPlaying = function () {
return service.currentAudio
&& service.currentAudio.currentTime > 0
&& !service.currentAudio.paused
&& !service.currentAudio.ended
&& service.currentAudio.readyState > 2;
}
我认为音频元素上大多数的标志都很明显,除了就绪状态,你可以在这里阅读更多信息:MDN HTMLMediaElement.readyState。
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false);
应该可以解决问题。
试试这个函数!如果位置在开头或结尾,则不会执行音频播放。
function togglePause() {
if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
myAudio.play();
} else {
myAudio.pause();
}
}
我在想这段代码能否正常运行,结果它出奇的运行成功:
if (a.paused == false) {
/*do something*/
}
或者您可以这样写:
if (!a.paused == true) {
/*do something*/
}
如果你想在 JSFiddle 中让你的 IDE 令人烦恼,请使用以下方法。
var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};
或者
var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };
试用以下代码:
var myAudio = document.getElementById("audioFile");
function playAudio() {
//audio.play();
//console.log(audio.play())
if (myAudio.paused && myAudio.currentTime >= 0 && !myAudio.started) {
myAudio.play();
console.log("started");
} else {
myAudio.pause();
}
}
<button id="play">Play Sound</button>
<script>
var sound = new Audio("path_to_sound.mp3")
sound.loop = false;
var play = document.getElementById("play")
play.addEventListener("click", () => {
if (!isPlaying()) {
sound.play()
} else {
//sound.pause()
}
})
function isPlaying() {
var infoPlaying = false
var currentTime = sound.currentTime == 0 ? true : false
var paused = sound.paused ? true : false
var ended = !sound.ended ? true : false
var readyState = sound.readyState == 0 ? true : false
if (currentTime && paused && ended && readyState) {
infoPlaying = true
} else if (!currentTime && !paused && ended && !readyState) {
infoPlaying = true
}
return infoPlaying
}
</script>
audio.played.length
是否为1
。只有当音频真正开始发出声音时,它才会为1。否则将为0
。这更像是一个技巧,但即使在移动浏览器中(如Safari和Chrome),它仍然有效。