【发布时间】:2026-01-14 01:25:01
【问题描述】:
用于检查 html5 音频元素是否正在播放的 javascript api 是什么?
【问题讨论】:
标签: javascript html audio
用于检查 html5 音频元素是否正在播放的 javascript api 是什么?
【问题讨论】:
标签: javascript html audio
function isPlaying(audelem) { return !audelem.paused; }
音频标签有一个paused 属性。如果它没有暂停,那么它正在播放。
【讨论】:
paused 属性表示媒体元素是否暂停。该属性最初必须为真”。也许@Harry 和@Tomas 在 2012 年发现情况并非如此,因为当时的规格还不清楚。但是......我在规范中找不到任何内容(不是说它不存在!)说播放结束时“暂停”属性必须为真。有意见吗?
您可以查看持续时间。如果持续时间超过 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 会做得更好。
!myAudio.paused || myAudio.currentTime 吗?
!myAudio.paused || myAudio.currentTime。似乎从来没有回复过......
虽然我对这个线程真的很晚了,但我使用这个实现来确定声音是否正在播放:
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);
应该做的伎俩。
【讨论】:
getElementsByTagName('audio')[0] 因为它返回集合,而不是一个元素
试试这个功能! 如果位置是开头或结尾,则不会执行音频播放
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*/
}
如果你想让你的 IDE 在 JSfiddle 中惹恼你。
【讨论】:
你可以使用onplay事件。
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();
}
}
【讨论】:
要检查音频是否真的开始播放,特别是如果你有一个流,需要检查audio.played.length 到1。只有当音频是真正的开始声音时,它才会为 1。否则将是0。它更像是一种 hack,但即使在 Safari 和 Chrome 等移动浏览器中仍然有效。
【讨论】:
我是这样做的
<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>
【讨论】:
我正在使用这个带有拖曳按钮播放和停止的 jquery 代码,播放按钮是一个播放和暂停按钮
const help_p = new Audio("audio/help.mp3");//Set Help Audio Name
$('#help_play').click(function() {//pause-Play
if (help_p.paused == false) {
help_p.pause();//pause if playing
} else {
help_p.play();//Play If Pausing
}
});
$('#help_stop').click(function() {//Stop Button
help_p.pause();//pause
help_p.currentTime = 0; //Set Time 0
});
【讨论】:
虽然没有称为 isPlaying 或类似的方法,但有几种方法可以完成此操作。
此方法在播放音频时获取进度百分比:
function getPercentProg() {
var myVideo = document.getElementById('myVideo');
var endBuf = myVideo.buffered.end(0);
var soFar = parseInt((endBuf / myVideo.duration) * 100);
document.getElementById('loadStatus').innerHTML = soFar + '%';
}
如果百分比大于 0 小于 100,则播放,否则停止。
【讨论】: