/**
* @file 音軌列表.js
*/
從 './track-list' 導入 TrackList;
/**
* 我們調用這個函數的任何地方都與規範不同
* 因為我們一次只支持一個啟用的音軌
*
* @param {AudioTrackList} 列表
* 工作清單
*
* @param {AudioTrack} 音軌
* 要跳過的曲目
*
* @私人的
*/
const disableOthers = function(list, track) {
為 (讓我 = 0; 我 < 列出. 長度; 我 ++) {
如果(!對象鍵(列表 [I])。長度 || 跟踪 ID === 列表 [我] .id){
繼續;
}
// 啟用另一個音軌,禁用它
列表 [i].enabled = false;
}
};
/**
* 媒體文件的當前 {@link AudioTrack} 列表。
*
* @see [規範]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}
* @extends 曲目列表
*/
類 AudioTrackList 擴展 TrackList {
/**
* 創建此類的一個實例。
*
* @param {AudioTrack[]} [tracks=[]]
* 用於實例化列表的 `AudioTrack` 列表。
*/
構造函數(軌道= []){
// 確保只啟用了 1 個軌道
// 從最後一個索引到第一個索引排序
對於(讓 i = tracks.length - 1; i >= 0; i--){
如果(軌道[i].enabled){
禁用其他(曲目,曲目[i]);
休息;
}
}
超級(曲目);
this.changing_ = false;
}
/**
* 添加一個 {@link AudioTrack} 到 `AudioTrackList`。
*
* @param {AudioTrack} 音軌
* 添加到列表中的 AudioTrack
*
* @fires TrackList#addtrack
*/
添加軌道(軌道){
如果(track.enabled){
禁用其他(這,跟踪);
}
super.addTrack(軌道);
// 本機曲目沒有這個
如果(!track.addEventListener){
返回;
}
track.enabledChange_ = () => {
// 當我們禁用其他軌道時(因為我們不支持
// 一次不止一個軌道)我們將設置 changing_
// 為真,這樣我們就不會觸發額外的更改事件
如果(this.changing_){
返回;
}
this.changing_ = true;
禁用其他(這,跟踪);
this.changing_ = false;
this.trigger('改變');
};
/**
* @listens AudioTrack#enabledchange
* @fires 曲目列表#change
*/
track.addEventListener('enabledchange', track.enabledChange_);
}
removeTrack(rtrack){
super.removeTrack(rtrack);
如果(rtrack.removeEventListener && rtrack.enabledChange_){
rtrack.removeEventListener('enabledchange', rtrack.enabledChange_);
rtrack.enabledChange_ = null;
}
}
}
導出默認 AudioTrackList;