Phương pháp này hoạt động:
audio.pause();
audio.currentTime = 0;
Nhưng nếu bạn không muốn phải viết hai dòng mã này mỗi khi bạn dừng âm thanh, bạn có thể thực hiện một trong hai điều sau. Thứ hai tôi nghĩ là phù hợp hơn và tôi không chắc tại sao "các vị thần của các tiêu chuẩn javascript" không tạo ra tiêu chuẩn này.
Phương pháp đầu tiên: tạo một chức năng và truyền âm thanh
function stopAudio(audio) {
audio.pause();
audio.currentTime = 0;
}
//then using it:
stopAudio(audio);
Phương thức thứ hai (được ưa thích): mở rộng lớp Audio:
Audio.prototype.stop = function() {
this.pause();
this.currentTime = 0;
};
Tôi có cái này trong một tệp javascript mà tôi gọi là "AudioPlus.js" mà tôi đưa vào html của mình trước bất kỳ tập lệnh nào sẽ xử lý âm thanh.
Sau đó, bạn có thể gọi chức năng dừng trên các đối tượng âm thanh:
audio.stop();
CUỐI CÙNG CHROME CUỐI CÙNG VỚI "canplayENC":
Tôi chưa thử nghiệm điều này trong tất cả các trình duyệt nhưng đây là sự cố tôi gặp phải trong Chrome. Nếu bạn cố gắng đặt currentTime trên một âm thanh có trình nghe sự kiện "có thể phát" được đính kèm với nó thì bạn sẽ kích hoạt lại sự kiện đó có thể dẫn đến kết quả không mong muốn.
Vì vậy, giải pháp, tương tự như tất cả các trường hợp khi bạn đã đính kèm một trình lắng nghe sự kiện mà bạn thực sự muốn đảm bảo rằng nó không được kích hoạt lại, là loại bỏ trình nghe sự kiện sau cuộc gọi đầu tiên. Một cái gì đó như thế này:
//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 ...
});
TẶNG KEM:
Lưu ý rằng bạn có thể thêm các phương thức tùy chỉnh hơn nữa vào lớp Audio (hoặc bất kỳ lớp javascript gốc nào cho vấn đề đó).
Ví dụ: nếu bạn muốn một phương thức "khởi động lại" để khởi động lại âm thanh, nó có thể trông giống như:
Audio.prototype.restart= function() {
this.pause();
this.currentTime = 0;
this.play();
};