Javascript Audio 事件指的是在加載、播放、暫停、停止、音量等方面,對(duì)音頻進(jìn)行各種操作時(shí)發(fā)生的事件。在開發(fā)網(wǎng)頁時(shí),如需添加音頻元素時(shí),我們通常會(huì)使用HTML5的audio標(biāo)簽,在JavaScript中,要控制這些音頻元素,就要用到Audio API。
在使用Audio API之前,我們需要先加載音頻文件,下面是一個(gè)示例:
var myAudio = new Audio("myAudio.mp3"); myAudio.load();
在加載完音頻后,我們通常需要添加一個(gè)事件監(jiān)聽器來確保音頻已經(jīng)加載完畢,然后才能進(jìn)行播放:
myAudio.addEventListener("canplaythrough", function() { myAudio.play(); });
上述代碼中,canplaythrough事件就是指音頻已經(jīng)可以連續(xù)播放而不需要緩沖。當(dāng)這個(gè)事件觸發(fā)時(shí),我們就可以調(diào)用play()方法開始播放音頻了。
除了canplaythrough事件之外,還有很多其他的音頻事件可供使用。下面是一些常用的事件列表:
- loadstart:音頻開始加載時(shí)觸發(fā)的事件
- loadedmetadata:音頻元數(shù)據(jù)加載完畢時(shí)觸發(fā)的事件
- play:播放音頻時(shí)觸發(fā)的事件
- pause:暫停音頻時(shí)觸發(fā)的事件
- ended:音頻播放結(jié)束時(shí)觸發(fā)的事件
- timeupdate:當(dāng)前播放時(shí)間更新時(shí)觸發(fā)的事件
- volumechange:音量改變時(shí)觸發(fā)的事件
- error:發(fā)生錯(cuò)誤時(shí)觸發(fā)的事件
下面是一個(gè)完整示例,展示了如何使用以上事件來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的音樂播放器:
var myAudio = new Audio("myAudio.mp3");
// 監(jiān)聽元數(shù)據(jù)加載完畢事件
myAudio.addEventListener("loadedmetadata", function() {
// 顯示音頻時(shí)長(zhǎng)
console.log("音頻時(shí)長(zhǎng):" + myAudio.duration);
});
// 監(jiān)聽播放結(jié)束事件
myAudio.addEventListener("ended", function() {
console.log("播放結(jié)束");
});
// 監(jiān)聽播放時(shí)間更新事件
myAudio.addEventListener("timeupdate", function() {
var currentTime = myAudio.currentTime,
duration = myAudio.duration;
console.log("當(dāng)前時(shí)間:" + currentTime + " / " + duration);
// 更新播放進(jìn)度條
updateProgress(currentTime / duration * 100);
});
// 監(jiān)聽音量改變事件
myAudio.addEventListener("volumechange", function() {
var volume = myAudio.volume;
console.log("當(dāng)前音量:" + volume);
// 更新音量進(jìn)度條
updateVolume(volume * 100);
});
function playAudio() {
myAudio.play();
}
function pauseAudio() {
myAudio.pause();
}
function stopAudio() {
myAudio.pause();
myAudio.currentTime = 0;
}
function setVolume(volume) {
myAudio.volume = volume;
}
盡管以上示例非常簡(jiǎn)單,但實(shí)際上它已經(jīng)包含了使用Audio API時(shí)經(jīng)常會(huì)遇到的各種問題。希望通過閱讀本文,讀者們能夠更好地理解和掌握J(rèn)avaScript Audio 事件的相關(guān)知識(shí)。