「play() リクエストが pause() の呼び出しによって中断されました」というエラーを防ぐにはどうすればよいでしょうか? 質問する

「play() リクエストが pause() の呼び出しによって中断されました」というエラーを防ぐにはどうすればよいでしょうか? 質問する

ユーザーがクリックすると音が鳴るウェブサイトを作りました。音が重ならないようにするには、次のコードを追加する必要がありました。

n.pause();
n.currentTime = 0;
n.play();

しかし、これにより、サウンド イベントが別のトリガーの直後にトリガーされるたびに、次のエラーが発生しますThe play() request was interrupted by a call to pause()
。サウンドは正常に再生されますが、このエラー メッセージが頻繁に表示されるのを防ぎたいです。何かアイデアはありますか?

ベストアンサー1

play()私も最近この問題に遭遇しました。これはとの間の競合状態である可能性がありますpause()。この問題、またはそれに関連する何かへの参照があるようです。ここ

として@パトリックは、pausepromise(または何か)を返さないので、上記の解決策は機能しません。MDNにはに関するドキュメントはありませんがpause()メディア要素の WC3 ドラフト、それは言う:

メディア.一時停止()

paused 属性を true に設定し、必要に応じてメディア リソースを読み込みます。

pausedしたがって、タイムアウト コールバックで属性をチェックすることもできます。

に基づくこの素晴らしいSOの回答ここでは、ビデオが本当に再生されているかどうか (または再生されていないかどうか) を確認する方法を紹介します。これにより、エラーなしで安全に play() をトリガーできます。

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

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

さもないと、@パトリック答え動作するはずです。

おすすめ記事