ユーザーがクリックすると音が鳴るウェブサイトを作りました。音が重ならないようにするには、次のコードを追加する必要がありました。
n.pause();
n.currentTime = 0;
n.play();
しかし、これにより、サウンド イベントが別のトリガーの直後にトリガーされるたびに、次のエラーが発生しますThe play() request was interrupted by a call to pause()
。サウンドは正常に再生されますが、このエラー メッセージが頻繁に表示されるのを防ぎたいです。何かアイデアはありますか?
ベストアンサー1
play()
私も最近この問題に遭遇しました。これはとの間の競合状態である可能性がありますpause()
。この問題、またはそれに関連する何かへの参照があるようです。ここ。
として@パトリックは、pause
promise(または何か)を返さないので、上記の解決策は機能しません。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();
}