2011-07-29 10 views
48

Widzę, że interfejs MediaElement udostępnia atrybuty takie jak paused, seeking i ended. Brakuje go jednak na liście: playing.Jak sprawdzić, czy element <video> jest obecnie odtwarzany?

Wiem, że istnieją playing events ogień gdy element zaczyna grę, a timeupdate events imprezy cyklicznie podczas gry, ale szukam sposobu, aby ustalić, czy film jest odtwarzany teraz. Czy istnieje prosty sposób na określenie tego?

Najbliżej mam to:

!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA) 

Odpowiedz

42

Nie ma specyficzny atrybut, który pokaże, czy MediaElement jest aktualnie odtwarzany. Możesz jednak wydedukować to ze stanu innych atrybutów. Jeśli:

  • currentTime jest większa od zera, a
  • paused jest fałszywa, a
  • ended jest fałszywa

następnie element jest aktualnie odtwarzany.

Może zajść potrzeba sprawdzenia, czy nośnik został zatrzymany z powodu błędów.

+0

Założenie to nie wydaje się trzymać w IE. Gdy użytkownik szuka (a wideo nie jest teraz odtwarzane), currentTime może być większe niż 0 i paused = zakończone = fałsz w tym samym czasie. – Bjarke

+0

currentTime daje mi czas trwania wideo w sekundach jako spust w Safari, jeśli wideo jeszcze się nie zaczęło. –

7
var video = $('selector').children('video'); 

var videoElement = video.get(0); 

if (!videoElement.paused) {} 

Jeden sposób to zrobić przy użyciu jQuery

41

To było dawno, ale tutaj jest wielka wskazówka. Można zdefiniować .playing jako niestandardową właściwość dla wszystkich elementów multimedialnych i uzyskać do niej dostęp w razie potrzeby. Oto jak:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', { 
    get: function(){ 
     return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2); 
    } 
}) 

Teraz można go używać na <video> lub <audio> elementów tak:

if(document.querySelector('video').playing){ // checks if element is playing right now 
    // Do anything you want to 
} 
+0

działa świetnie, dzięki – corvid

Powiązane problemy