150 votes

Comment prévenir l’erreur « la requête play() a été interrompue par un appel à pause() » ?

J’ai fait un site Web où si l’utilisateur clique, il émet un son. Pour éviter que le son qui se chevauchent, j’ai dû ajouter le code :

Mais qui provoque l’erreur :``
Pour venir, chaque fois, le son est déclenché juste après un autre déclencheur. Les sons n’est pas encore très bien, mais je veux éviter ce message d’erreur cesse. Toutes les idées ?

Merci d’avance !

117voto

JohnnyCoder Points 454

J'ai rencontré ce problème récemment - ce qui pourrait être une condition de concurrence entre play() et pause(). Il semble qu'il y est une référence à ce problème, ou quelque chose lié ici.

Comme @Patrick points, pause ne renvoie pas une promesse (ou autre), de sorte que la solution ci-dessus ne fonctionne pas. Alors que MDN n'a pas de docs sur pause(), dans le projet de WC3 pour les Médias Éléments, il est dit:

médias.pause()

Définit la couleur de l'attribut à true, le chargement de la ressource pour les médias si nécessaire.

On peut également vérifier l' paused d'attribut dans leur délai de rappel.

Basé sur cette grande réponse, voici une façon, vous pouvez vérifier si la vidéo est (ou n'est pas) vraiment de jouer, donc vous pouvez sans risque de déclenchement d'un jeu() sans erreur.

var isPlaying = video.currentTime > 0 && !video.paused && !video.ended 
    && video.readyState > 2;

if (!isPlaying) {
  video.play();
}

Sinon, @Patrick's réponse devrait fonctionner.

90voto

Nebojsa Sapic Points 1184

Après des heures de travail et effectuant, j’ai trouvé la parfaite solution.

Après cela, vous pouvez alterner lecture/pause aussi vite que vous le pouvez, il ne fonctionnera pas correctement.

25voto

Patrick Points 1131

J’ai ont frappé cette question et ont un cas où je devais toucher pause() puis play(), mais lorsque vous utilisez pause().then() que j’obtiens.

J’ai trouvé que si je commençais à jouer 150ms après la pause il a résolu le problème. (J’espère que Google corrige bientôt)

8voto

gest Points 165

Essaie

4voto

Dmitry Kovganov Points 31

Cette solution m’a aidé :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X