/**
* @file track-list.js
*/
從 '../event-target' 導入 EventTarget;
從'../mixins/evented'導入{isEvented};
/**
* {@link TextTrackList}、{@link AudioTrackList} 和
* {@link VideoTrackList}
*
* @extends 事件目標
*/
類 TrackList 擴展 EventTarget {
/**
* 創建這個類的一個實例
*
* @param {Track[]} 曲目
* 用於初始化列表的曲目列表。
*
* @抽象的
*/
構造函數(軌道= []){
極好的();
this.tracks_ = [];
/**
* @memberof 曲目列表
* @member {number} 長度
* 此 Trackist 中的當前 `Track` 數。
* @實例
*/
Object.defineProperty(this, '長度', {
得到() {
返回 this.tracks_.length;
}
});
對於(讓我 = 0; 我 < 跟踪。長度; 我 ++){
this.addTrack(tracks[i]);
}
}
/**
* 添加 {@link Track} 到 `TrackList`
*
* @param {Track} 軌道
* 要添加到列表中的音頻、視頻或文本軌道。
*
* @fires TrackList#addtrack
*/
添加軌道(軌道){
const index = this.tracks_.length;
如果(!(「+ 在這個索引)){
Object.defineProperty(這個,索引,{
得到() {
返回 this.tracks_[index];
}
});
}
// 不要添加重複的曲目
如果 (this.tracks_.indexOf(track) === -1) {
this.tracks_.push(track);
/**
* 當曲目添加到曲目列表時觸發。
*
* @event 曲目列表#addtrack
* @type {EventTarget~Event}
* @property {軌道}軌道
* 對添加的軌道的引用。
*/
這個。觸發({
追踪,
類型:“添加曲目”,
目標:這個
});
}
/**
* 當曲目標籤改變時觸發。
*
* @event 曲目列表#addtrack
* @type {EventTarget~Event}
* @property {軌道}軌道
* 對添加的軌道的引用。
*/
track.labelchange_ = () => {
這個。觸發({
追踪,
類型:'labelchange',
目標:這個
});
};
如果(isEvented(軌道)){
track.addEventListener('labelchange', track.labelchange_);
}
}
/**
* 從 `TrackList` 中刪除 {@link Track}
*
* @param {Track} rtrack
* 要從列表中刪除的音頻、視頻或文本軌道。
*
* @fires TrackList#removetrack
*/
removeTrack(rtrack){
讓跟踪;
對於(讓我 = 0,升 = 這個。長度; < 我; 我 ++){
如果(這個[i] === rtrack){
軌道=這個[我];
如果(track.off){
軌道關閉();
}
this.tracks_.splice(i, 1);
休息;
}
}
如果(!跟踪){
返回;
}
/**
* 從曲目列表中刪除曲目時觸發。
*
* @event TrackList#removetrack
* @type {EventTarget~Event}
* @property {軌道}軌道
* 對已刪除曲目的引用。
*/
這個。觸發({
追踪,
類型:'removetrack',
目標:這個
});
}
/**
* 通過 tracks id 從 TrackList 中獲取一個 Track
*
* @param {string} id - 要獲取的軌道的 id
* @method getTrackById
* @return {軌道}
* @私人的
*/
getTrackById(id) {
讓結果=空;
對於(讓我 = 0,升 = 這個。長度; < 我; 我 ++){
const track = this[i];
如果(track.id === id){
結果=跟踪;
休息;
}
}
返回結果;
}
}
/**
* 當選擇/啟用不同的軌道時觸發。
*
* @event 曲目列表#change
* @type {EventTarget~Event}
*/
/**
* 可以用 on + eventName 調用的事件。請參閱{@link EventHandler}。
*
* @property {Object} TrackList#allowedEvents_
* @私人的
*/
TrackList.prototype.allowedEvents_ = {
改變:'改變',
添加軌道:'添加軌道',
removetrack: 'removetrack',
labelchange:'labelchange'
};
// 模擬屬性 EventHandler 支持以允許進行特徵檢測
對於(TrackList.prototype.allowedEvents_ 中的常量事件){
TrackList.prototype['on' + event] = null;
}
導出默認曲目列表;