/**
* @file video-track-list.js
*/
'./track-list'에서 TrackList 가져오기;
/**
* 선택된 다른 모든 {@link VideoTrack}을 선택 취소합니다.
*
* @param {VideoTrackList} 목록
* 작업할 목록
*
* @param {VideoTrack} 트랙
* 건너뛸 트랙
*
* @사적인
*/
const disableOthers = 기능(목록, 추적) {
에 대한 (하자 i = 0; i < 목록 길이; i++) {
if (!Object.keys(list[i]).length || track.id === list[i].id) {
계속하다;
}
// 다른 비디오 트랙이 활성화되어 있으면 비활성화합니다.
list[i].selected = 거짓;
}
};
/**
* 동영상에 대한 {@link VideoTrack}의 현재 목록입니다.
*
* @see [사양]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
* @extends 트랙리스트
*/
클래스 VideoTrackList 확장 TrackList {
/**
* 이 클래스의 인스턴스를 만듭니다.
*
* @param {VideoTrack[]} [트랙=[]]
* 목록을 인스턴스화할 `VideoTrack` 목록.
*/
생성자(트랙 = []) {
// 1개의 트랙만 활성화되었는지 확인
// 마지막 인덱스에서 첫 번째 인덱스로 정렬
for (let i = 트랙 길이 - 1; i > = 0; 나--) {
if (트랙[i].선택됨) {
disableOthers(트랙, 트랙[i]);
부서지다;
}
}
슈퍼(트랙);
this.change_ = 거짓;
/**
* @member {숫자} VideoTrackList#selectedIndex
* 선택된 {@link VideoTrack`}의 현재 인덱스.
*/
Object.defineProperty(이것, 'selectedIndex', {
얻다() {
에 대한 (하자 i = 0; i < this.길이; i++) {
if (이[i].선택) {
나는 반환;
}
}
-1 반환;
},
세트() {}
});
}
/**
* `VideoTrackList`에 {@link VideoTrack}을 추가합니다.
*
* @param {VideoTrack} 트랙
* 목록에 추가할 VideoTrack
*
* @fires 트랙리스트#addtrack
*/
addTrack(트랙) {
경우 (track.selected) {
disableOthers(this, 트랙);
}
super.addTrack(트랙);
// 네이티브 트랙에는 이것이 없습니다.
if (!track.addEventListener) {
반품;
}
track.selectedChange_ = () => {
if (이.변화_) {
반품;
}
this.change_ = 참;
disableOthers(this, 트랙);
this.change_ = 거짓;
this.trigger('변경');
};
/**
* @listens VideoTrack#selectedchange
* @fires 트랙리스트#변경
*/
track.addEventListener('selectedchange', track.selectedChange_);
}
removeTrack(rtrack) {
super.removeTrack(rtrack);
if (rtrack.removeEventListener && rtrack.selectedChange_) {
rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
rtrack.selectedChange_ = null;
}
}
}
기본 VideoTrackList 내보내기;