/**
* @file setup.js - 設置播放器的函數
* 基於視頻標籤的數據設置“屬性”的用戶交互。
*
* @模塊設置
*/
從 './utils/dom' 導入 * 作為 Dom;
從“全局/文檔”導入文檔;
從“全局/窗口”導入窗口;
讓_windowLoaded =假;
讓 videojs;
/**
* 在播放器啟動時設置任何具有數據設置“屬性”的標籤。
*/
const autoSetup = function() {
如果(videojs.options.autoSetup === false){
返回;
}
const vids = Array.prototype.slice.call(document.getElementsByTagName('video'));
const audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));
const divs = Array.prototype.slice.call(document.getElementsByTagName('video-js'));
const mediaEls = vids.concat(audios, divs);
// 檢查是否存在任何媒體元素
如果 (mediaEls && mediaEls.length > 0) {
對於(讓我 = 0,e = 介質。長度; 我 < ; 我 ++){
const mediaEl = mediaEls[i];
// 檢查元素是否存在,是否有 getAttribute 函數。
如果 (mediaEl && mediaEl.getAttribute) {
// 確保尚未設置此播放器。
如果(mediaEl.player === undefined){
const options = mediaEl.getAttribute('data-setup');
// 檢查數據設置屬性是否存在。
// 如果他們添加了數據設置屬性,我們只會自動設置。
如果(選項!== null){
// 創建新的 video.js 實例。
videojs(媒體);
}
}
// 如果未定義 getAttribute,我們需要等待 DOM。
}其他{
自動設置超時(1);
休息;
}
}
// 沒有找到視頻,所以繼續循環直到頁面加載完成。
} 否則,如果(!視窗載入 (_W) {
自動設置超時(1);
}
};
/**
* 在運行 autoSetup 之前等待頁面加載完畢。這將在
* 如果 `hasLoaded` 返回 false,則自動設置。
*
* @param {number} 等待
* 以毫秒為單位等待多長時間
*
* @param {模塊:視頻} [VJS]
* videojs庫函數
*/
函數 autoSetupTimeout(等待,vjs){
// 防止在非瀏覽器環境中損壞
如果(!Dom.isReal()){
返回;
}
如果(vjs){
videojs = vjs;
}
window.setTimeout(自動設置,等待);
}
/**
* 用於將窗口加載狀態的內部跟踪設置為 true。
*
* @私人的
*/
函數 setWindowLoaded() {
_windowLoaded = 真;
window.removeEventListener('load', setWindowLoaded);
}
如果(Dom.isReal()){
如果 (document.readyState === '完成') {
設置窗口加載();
}其他{
/**
* 監聽 window 的加載事件,並將 _windowLoaded 設置為 true。
*
* 我們在這裡使用標準事件偵聽器以避免增加 GUID
* 在創建任何玩家之前。
*
* @listens 負載
*/
window.addEventListener('load', setWindowLoaded);
}
}
/**
* 檢查窗口是否已經加載
*/
const hasLoaded = function() {
返回_windowLoaded;
};
出口 {autoSetup, autoSetupTimeout, hasLoaded};