場景:
為了節省頁面資源,往往需要將一段小音頻循環播放,通常做法是在audio標簽上添加loop屬性,但不幸的是,該屬性並不能保證無縫循環(gapless looping)播放,明顯的感覺到中間的停頓。
解決方案:
使用audio標簽的Web API提供的方法和屬性進行循環播放,具體如下
事件名稱 | 事件作用 |
timeupdate | 當前播放的時長發生改變時觸發 |
屬性名稱 | 屬性作用 |
currentTime | 用來獲取或控制當前播放的時間,單位為s |
duration | 獲取媒體文件的總時長,以s為單位,如果無法獲取,返回NaN |
主要監聽timeupdate事件,然后比較播放時間屬性currentTime和音頻的時長屬性duration,在快要結束的時候,將currentTime屬性重新設置為0,代碼如下:
// 使用web audio API
var audio_file = new Audio('./videos/bg.mp3');
audio_file.play();
audio_file.addEventListener('timeupdate', function(){
var buffer = 1.2;
if(this.currentTime > this.duration - buffer){
this.currentTime = 0;
this.play();
}}, false);
var audio_file = new Audio('./videos/bg.mp3');
audio_file.play();
audio_file.addEventListener('timeupdate', function(){
var buffer = 1.2;
if(this.currentTime > this.duration - buffer){
this.currentTime = 0;
this.play();
}}, false);
使用要求:
(1)音樂盡量是「淡入淡出」型,重音盡量不要在開頭或結束位置,否則,即使能將音樂循環播放,也會感覺不銜接;
(2)API接口只能用於webkit內核,比較新的瀏覽器