2011-07-29 18 views
48

Veo que la interfaz MediaElement expone atributos como paused, seeking y ended. Desaparecido de la lista, sin embargo, es playing.¿Cómo saber si un elemento <video> se está reproduciendo actualmente?

Sé que hay playing events que se activan cuando un elemento se inicia de juego, y timeupdate events eventos periódicamente durante el juego, pero estoy buscando una manera de determinar si un vídeo se está reproduciendo en este momento . ¿Hay alguna manera fácil de determinar esto?

El más cercano que tengo es:

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

Respuesta

42

No es un atributo específico que revelará si un MediaElement está jugando actualmente. Sin embargo, puede deducir esto del estado de los otros atributos. Si:

  • currentTime es mayor que cero, y
  • paused es falso, y
  • ended es falso

entonces el elemento está jugando actualmente.

También es posible que deba comprobar readyState para ver si el medio se detuvo debido a errores.

+0

no parece Este supuesto para mantener en el IE. Mientras el usuario está buscando (y el video no está reproduciéndose en este momento), currentTime puede ser mayor que 0 y paused = ended = false al mismo tiempo. – Bjarke

+0

currentTime me da la duración del video en segundos como flotador en Safari si el video aún no se ha iniciado. –

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

var videoElement = video.get(0); 

if (!videoElement.paused) {} 

Una forma de hacerlo es usando jQuery

41

Ha sido un largo tiempo, pero aquí hay una gran punta. Puede definir .playing como una propiedad personalizada para todos los elementos multimedia y acceder a ella cuando sea necesario. Aquí es cómo:

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

Ahora usted puede usarlo en <video> o <audio> elementos como este:

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

funciona muy bien, gracias – corvid

Cuestiones relacionadas