Je vois que l'interface MediaElement expose des attributs comme paused
, seeking
et ended
. Il manque cependant dans la liste playing
.
Je sais qu'il y a playing
événements qui se déclenchent lorsqu'un élément commence à jouer, et timeupdate
events événements périodiquement pendant la lecture, mais je cherche un moyen de déterminer si une vidéo est en cours de lecture en ce moment . Existe-t-il un moyen simple de déterminer cela?
Le plus proche que j'ai est:
!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA)
Cela fait longtemps, mais voici un excellent conseil. Vous pouvez définir .playing
comme propriété personnalisée pour tous les éléments multimédias et y accéder en cas de besoin. Voici comment:
Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
get: function(){
return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
}
})
Vous pouvez maintenant l'utiliser sur <video>
ou <audio>
éléments comme celui-ci:
if(document.querySelector('video').playing){ // checks if element is playing right now
// Do anything you want to
}
Il n'y a pas d'attribut spécifique qui révélera si un MediaElement
est en cours de lecture. Cependant, vous pouvez le déduire de l'état des autres attributs. Si:
currentTime
est supérieur à zéro, etpaused
est faux, etended
est fauxalors l'élément est en cours de lecture.
Vous devrez peut-être également vérifier readyState
pour voir si le support s'est arrêté en raison d'erreurs. Peut-être quelque chose comme ça:
const isVideoPlaying = video => !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);
var video = $('selector').children('video');
var videoElement = video.get(0);
if (!videoElement.paused) {}
Une façon de le faire en utilisant Jquery
Voir ma réponse ici: balise vidéo HTML5, javascript pour détecter l'état de lecture?
Fondamentalement, comme indiqué précédemment, il n'y a pas de propriété unique à vérifier, mais selon les spécifications, c'est une combinaison de conditions.