Come sapere se un elemento è attualmente in riproduzione?

Vedo che l’interfaccia MediaElement espone attributi come in paused , in seeking e ended . Manca dalla lista, tuttavia, sta playing .

So che ci sono eventi di playing che si timeupdate quando un elemento inizia a suonare, e timeupdate periodicamente gli eventi eventi durante il gioco, ma sto cercando un modo per determinare se un video è in riproduzione in questo momento . C’è un modo semplice per determinare questo?

Il più vicino che ho è:

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

Non esiste un attributo specifico che rivelerà se un MediaElement è attualmente in riproduzione. Tuttavia, puoi dedurlo dallo stato degli altri attributi. Se:

  • currentTime è maggiore di zero e
  • paused è falso, e
  • ended è falso

quindi l’elemento è attualmente in riproduzione.

Potrebbe anche essere necessario controllare readyState per vedere se il supporto si è fermato a causa di errori.

È passato molto tempo ma ecco un ottimo consiglio. È ansible definire .playing come proprietà personalizzata per tutti gli elementi multimediali e accedervi quando necessario. Ecco come:

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

Ora puoi usarlo su o elementi come questo:

 if(document.querySelector('video').playing){ // checks if element is playing right now // Do anything you want to } 
 var video = $('selector').children('video'); var videoElement = video.get(0); if (!videoElement.paused) {} 

Un modo per farlo usando Jquery

Vedi la mia risposta qui: tag video HTML5, javascript per rilevare lo stato di riproduzione?

Fondamentalmente, come detto prima, non c’è una singola proprietà da controllare, ma secondo le specifiche è una combinazione di condizioni.