この方法は機能します:
audio.pause();
audio.currentTime = 0;
しかし、オーディオを停止するたびにこの 2 行のコードを記述したくない場合は、次の 2 つの方法のいずれかを実行できます。2 番目の方がより適切だと思いますが、「JavaScript 標準の神々」がこの標準を作成しなかった理由がわかりません。
最初の方法: 関数を作成して音声を渡す
function stopAudio(audio) {
audio.pause();
audio.currentTime = 0;
}
//then using it:
stopAudio(audio);
2 番目の方法 (推奨): Audio クラスを拡張します。
Audio.prototype.stop = function() {
this.pause();
this.currentTime = 0;
};
これは、オーディオを処理するスクリプトの前にhtmlに含める「AudioPlus.js」と呼ばれるjavascriptファイルにあります。
次に、オーディオ オブジェクトで stop 関数を呼び出すことができます。
audio.stop();
最後に、「canplaythrough」に関する Chrome の問題:
すべてのブラウザーでこれをテストしたわけではありませんが、これは Chrome で発生した問題です。「canplaythrough」イベント リスナーがアタッチされているオーディオに currentTime を設定しようとすると、そのイベントが再度トリガーされ、望ましくない結果が生じる可能性があります。
そのため、再度トリガーされないようにしたいイベント リスナーをアタッチしたすべてのケースと同様に、解決策は、最初の呼び出しの後にイベント リスナーを削除することです。このようなもの:
//note using jquery to attach the event. You can use plain javascript as well of course.
$(audio).on("canplaythrough", function() {
$(this).off("canplaythrough");
// rest of the code ...
});
ボーナス:
さらに多くのカスタム メソッドを Audio クラス (またはネイティブの JavaScript クラス) に追加できることに注意してください。
たとえば、オーディオを再起動する「再起動」メソッドが必要な場合は、次のようになります。
Audio.prototype.restart= function() {
this.pause();
this.currentTime = 0;
this.play();
};