/**
* @file time-ranges.js
* @module 時間範圍
*/
從“全局/窗口”導入窗口;
/**
* 返回指定索引開始或結束的時間
* TimeRange 對象。
*
* @typedef {函數} TimeRangeIndex
*
* @param {number} [索引=0]
* 返回時間的範圍號。
*
* @return {數字}
* 指定索引處的時間偏移量。
*
* @deprecated 必須提供索引參數。
* 以後遺漏它會拋出錯誤。
*/
/**
* 包含時間範圍的對象。
*
* @typedef {Object} 時間範圍
*
* @property {number} 長度
* 此對象表示的時間範圍數。
*
* @property {模塊:時間範圍〜時間索引} 開始
* 返回指定時間範圍開始的時間偏移量。
*
* @property {模塊:時間範圍〜時間索引} 結束
* 返回指定時間範圍結束的時間偏移量。
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges
*/
/**
* 檢查是否有任何時間範圍超過最大索引。
*
* @私人的
* @param {string} fnName
* 用於記錄的函數名
*
* @param {number} 索引
* 要檢查的索引
*
* @param {number} 最大索引
* 最大可能索引
*
* @throws {Error} 如果提供的時間範圍超過 maxIndex
*/
函數 rangeCheck(fnName, index, maxIndex) {
如果(類型索引!== '數字' || 索引 < 0 || 索引 > 最大索引){
拋出新的錯誤(`無法在'TimeRanges'上執行'$ {fnName}':提供的索引 (${index}) 是非數字的或超出範圍 (0-${maxIndex}).`);
}
}
/**
* 獲取指定索引開始或結束的時間
* TimeRange 對象。
*
* @私人的
* @param {string} fnName
* 用於記錄的函數名
*
* @param {string} 值索引
* 用於獲取時間的屬性。應該
*“開始”或“結束”
*
* @param {Array} 範圍
* 時間範圍數組
*
* @param {數組} [rangeIndex=0]
* 開始搜索的索引
*
* @return {數字}
* 在指定索引處偏移的時間。
*
* @deprecated rangeIndex 必須設置一個值,將來這會拋出錯誤。
* @throws {Error} 如果 rangeIndex 大於範圍的長度
*/
函數 getRange(fnName, valueIndex, ranges, rangeIndex) {
rangeCheck(fnName, rangeIndex, ranges.length - 1);
返回範圍[範圍索引][值索引];
}
/**
* 創建一個給定時間範圍的時間範圍對象。
*
* @私人的
* @param {數組} [範圍]
* 一組時間範圍。
*/
函數 createTimeRangesObj(範圍){
讓時間範圍對象;
如果(範圍===未定義||範圍。長度=== 0){
時間範圍對象 = {
長度:0,
開始() {
throw new Error('這個 TimeRanges 對像是空的');
},
結尾() {
throw new Error('這個 TimeRanges 對像是空的');
}
};
}其他{
時間範圍對象 = {
長度:範圍。長度,
開始:getRange.bind(空,'開始',0,範圍),
結束:getRange.bind(空,'結束',1,範圍)
};
}
如果 (window.Symbol && window.Symbol.iterator) {
timeRangesObj[window.Symbol.iterator] = () => (範圍 || []).values();
}
返回時間範圍對象;
}
/**
* 創建一個模仿 TimeRange 的對象
* {@link https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges 實例}。
*
* @param {number|Array[]} 開始
* 單個範圍(數字)或範圍數組(一個
* 數組數組,每個數組包含兩個數字)。
*
* @param {number} 結束
* 單個範圍的結尾。不能與數組形式一起使用
* `start` 參數。
*/
導出函數 createTimeRanges(開始,結束){
如果(Array.isArray(開始)){
返回 createTimeRangesObj(開始);
} else if(開始===未定義||結束===未定義){
返回 createTimeRangesObj();
}
返回 createTimeRangesObj([[開始,結束]]);
}
導出 { createTimeRanges 作為 createTimeRange };