Ta metoda działa:
audio.pause();
audio.currentTime = 0;
Ale jeśli nie chcesz pisać tych dwóch wierszy kodu za każdym razem, gdy zatrzymujesz dźwięk, możesz zrobić jedną z dwóch rzeczy. Myślę, że drugi jest bardziej odpowiedni i nie jestem pewien, dlaczego „bogowie standardów javascript” nie stworzyli tego standardu.
Pierwsza metoda: utwórz funkcję i przekaż dźwięk
function stopAudio(audio) {
audio.pause();
audio.currentTime = 0;
}
//then using it:
stopAudio(audio);
Druga metoda (preferowana): rozszerz klasę Audio:
Audio.prototype.stop = function() {
this.pause();
this.currentTime = 0;
};
Mam to w pliku javascript, który nazwałem „AudioPlus.js”, który umieszczam w moim html przed każdym skryptem, który będzie zajmował się dźwiękiem.
Następnie możesz wywołać funkcję stop na obiektach audio:
audio.stop();
WRESZCIE PROBLEM Z CHROMEM Z „Canplaythrough”:
Nie testowałem tego we wszystkich przeglądarkach, ale jest to problem, na który natknąłem się w Chrome. Jeśli spróbujesz ustawić currentTime dla dźwięku, do którego jest dołączony detektor zdarzenia „canplaythrough”, ponownie uruchomisz to zdarzenie, co może prowadzić do niepożądanych rezultatów.
Tak więc rozwiązaniem, podobnym do wszystkich przypadków, w których dołączyłeś detektor zdarzeń, który naprawdę chcesz mieć pewność, że nie zostanie ponownie uruchomiony, jest usunięcie nasłuchiwania zdarzeń po pierwszym wywołaniu. Coś takiego:
//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 ...
});
PREMIA:
Zauważ, że możesz dodać jeszcze więcej niestandardowych metod do klasy Audio (lub dowolnej natywnej klasy javascript).
Na przykład, jeśli potrzebujesz metody „restartu”, która ponownie uruchamia dźwięk, może to wyglądać mniej więcej tak:
Audio.prototype.restart= function() {
this.pause();
this.currentTime = 0;
this.play();
};