HTML5 sesin çalıp çalmadığını kontrol ediyor mu?


Yanıtlar:


152
function isPlaying(audelem) { return !audelem.paused; }

Ses etiketinin bir pausedözelliği vardır. Duraklatılmamışsa, çalmaktadır.


Durak olmadığı için bu temiz bir çözümdür.
Todd Moses

11
Ya hiç başlamadıysa?
Harry

30
Bu yanlış cevap. Ben sadece onunla çalışıyorum ve ilk başlamadan önce .paused yanlıştır.
Tomas

2
@Tom jsbin'iniz var mı? Bunu denedim ve doğru cevap gibi görünüyor.
Harry

3
@Harry Ben daha çok oynuyordum ve bazı tarayıcılarda işe yarıyor ve bazılarında çalışmıyor gibi görünüyor. Sanırım uygulamaya bağlı. Ancak, Chrome ve Firefox için en son güncellemeler için işe yarıyor gibi görünüyor, bu nedenle Bu yanıt, en son uygulamalar için doğrudur.
Tomas

44

Süreyi kontrol edebilirsiniz. Süre 0 saniyeden fazlaysa ve duraklatılmamışsa çalmaktadır.

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.

}

2
Şahsen !myAudio.paused||!myAudio.currentTimebunun daha iyi bir iş çıkaracağına inanıyorum .
m93a

11
@ m93a demek istemiyor musun !myAudio.paused || myAudio.currentTime?
MalcolmOcean

5
Evet olmalı !myAudio.paused || myAudio.currentTime. Asla cevap
Parth

16

Bu konuya gerçekten geç kalmama rağmen, sesin çalıp çalmadığını anlamak için bu uygulamayı kullanıyorum:

service.currentAudio = new Audio();

var isPlaying = function () {
    return service.currentAudio
        && service.currentAudio.currentTime > 0
        && !service.currentAudio.paused
        && !service.currentAudio.ended
        && service.currentAudio.readyState > 2;
}

Sanırım ses öğesindeki bayrakların çoğu, burada okuyabileceğiniz hazır durumundan ayrı olarak açık: MDN HTMLMediaElement.readyState .


Ses kilitlendiğinde iOS tarafından otomatik olarak duraklatılırsa çalışmaz.
shukshin.ivan

13
document.getElementsByTagName('audio').addEventListener('playing',function() { myfunction(); },false); 

Hile yapmalı.


5

Bu işlevi deneyin! Konum başlangıç ​​veya bitiş ise ses çalınmayacaktır

function togglePause() {
     if (myAudio.paused && myAudio.currentTime > 0 && !myAudio.ended) {
         myAudio.play();
     } else {
         myAudio.pause();
     }
}

0

Sesin gerçekten çalmaya başlayıp başlamadığını kontrol etmek için, özellikle de bir yayınınız varsa, kontrol audio.played.lengthetmeniz gerekir 1. Sadece ses gerçekten başlangıç ​​sesleri ise 1 olacaktır. Aksi takdirde olacak 0. Daha çok bir bilgisayar korsanlığı gibi, ancak yine de Safari ve Chrome gibi mobil tarayıcılarda bile çalışıyor.


0

onplay olayını kullanabilirsiniz.

var audio = document.querySelector('audio');
audio.onplay = function() { /* do something */};

veya

var audio = document.querySelector('audio');
audio.addEventListener('play', function() { /* do something */ };

0

Bu jquery kodunu çekme düğmesi oynatma ve durdurma ile kullanıyorum, oynat düğmesi bir oynat ve pouse düğmesidir

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
});

-2

İsPlaying veya benzer bir yöntem olarak adlandırılan bir yöntem olmasa da, bunu başarmanın birkaç yolu vardır.

Bu yöntem, ses çalarken ilerleme yüzdesini alır:

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 + '%';
}

Yüzde, 0'dan büyük ve 100'den küçükse oynamaktadır, aksi takdirde durdurulur.


Eee, ya ortadaki sesi duraklatırsam?
Niet the Dark Absol

1
O zaman oynamayacaktı.
Todd Moses

Bu yalnızca arabelleğe alınan miktarı algılar. Örneğin, ses öğesi verileri arabelleğe almaya başlamışsa ancak yeterli veriye sahip olmadığı için çalmaya başlamamışsa, bu yöntem yine de doğru olarak dönebilir. Veya öğe, oynatmanın bir parçası olarak verileri arabelleğe almışsa ve daha sonra duraklatılmışsa.
dhasenan

getElementsByTagName ('videom')? Bunun getElementById ('myVideo') olması gerektiğini düşünüyorum
Lucky Soni

2
Em ... Neden eksiltiyorsun? Harika bir fikir, kötü yazılmış olsa da. Gerçek zamanlı sesin (WebRTC) .paused ile oynatılıp oynatılmadığını nasıl kontrol edebilirsiniz? Yalnızca tampon kontrolüyle. Eksi hak değil. Oy veriyorum.
igorpavlov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.