/**
* @Datei video-track-list.js
* /
importiere TrackList von './track-list';
/**
* Heben Sie die Auswahl aller anderen ausgewählten {@link VideoTrack}s auf.
*
* @param {VideoTrackList} list
* zu bearbeitende Liste
*
* @param {VideoTrack} track
* Der zu überspringende Titel
*
* @privat
* /
const disableOthers = function(list, track) {
for (let i = 0; i < list.length; i++) {
if (!Object.keys(list[i]).length || track.id === list[i].id) {
weiter;
}
// eine andere Videospur ist aktiviert, deaktivieren Sie sie
list[i].selected = false;
}
};
/**
* Die aktuelle Liste von {@link VideoTrack} für ein Video.
*
* @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}
* @erweitert TrackList
* /
class VideoTrackList extends TrackList {
/**
* Erstellen Sie eine Instanz dieser Klasse.
*
* @param {VideoTrack[]} [tracks=[]]
* Eine Liste von `VideoTrack`, mit der die Liste instanziiert wird.
* /
constructor(tracks = []) {
// Sicherstellen, dass nur 1 Spur aktiviert ist
// sortiert vom letzten Index zum ersten Index
for (let i = tracks.length - 1; i >= 0; i--) {
if (tracks[i].selected) {
disableOthers(tracks, tracks[i]);
pause;
}
}
super(tracks);
this.changing_ = false;
/**
* @Mitglied {Nummer} VideoTrackList#selectedIndex
* Der aktuelle Index des ausgewählten {@link VideoTrack`}.
* /
Object.defineProperty(this, 'selectedIndex', {
get() {
for (let i = 0; i < this.length; i++) {
if (this[i].selected) {
rückgabe i;
}
}
rückgabe -1;
},
set() {}
});
}
/**
* Hinzufügen eines {@link VideoTrack} zur `VideoTrackList`.
*
* @param {VideoTrack} track
* Der VideoTrack zum Hinzufügen in die Liste
*
* @fires TrackList#addtrack
* /
addTrack(track) {
if (track.selected) {
disableOthers(this, track);
}
super.addTrack(track);
// native Tracks haben dies nicht
if (!track.addEventListener) {
rückkehr;
}
track.selectedChange_ = () => {
if (this.changing_) {
rückkehr;
}
this.changing_ = true;
disableOthers(this, track);
this.changing_ = false;
this.trigger('change');
};
/**
* @listens VideoTrack#selectedchange
* @brände TrackList#ändern
* /
track.addEventListener('selectedchange', track.selectedChange_);
}
removeTrack(rtrack) {
super.removeTrack(rtrack);
if (rtrack.removeEventListener && rtrack.selectedChange_) {
rtrack.removeEventListener('selectedchange', rtrack.selectedChange_);
rtrack.selectedChange_ = null;
}
}
}
standard VideoTrackList exportieren;