/**
* @file setup.js - 없이 플레이어를 설정하는 기능
* 동영상 태그의 데이터 설정 '속성'에 기반한 사용자 상호작용.
*
* @모듈 설정
*/
import * as Dom from './utils/dom';
'글로벌/문서'에서 문서 가져오기;
'글로벌/창'에서 창 가져오기;
let _windowLoaded = 거짓;
let videojs;
/**
* 플레이어가 시작될 때 데이터 설정 '속성'이 있는 모든 태그를 설정합니다.
*/
const autoSetup = 함수() {
if (videojs.options.autoSetup === false) {
반품;
}
const vids = Array.prototype.slice.call(document.getElementsByTagName('비디오'));
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);
// 미디어 요소가 있는지 확인
if (mediaEls && mediaEls.길이 > 0) {
for (let i = 0, e = mediaEls.length; i < 이자형; i++) {
const mediaEl = mediaEls[i];
// 요소가 존재하는지 확인합니다. getAttribute func가 있습니다.
if (미디어엘 && mediaEl.getAttribute) {
// 이 플레이어가 아직 설정되지 않았는지 확인합니다.
if (mediaEl.player === 정의되지 않음) {
const options = mediaEl.getAttribute('data-setup');
// data-setup attr이 존재하는지 확인합니다.
// data-setup 속성을 추가한 경우에만 자동 설정합니다.
if (옵션 !== null) {
// 새로운 video.js 인스턴스를 만듭니다.
videojs(미디어엘);
}
}
// getAttribute가 정의되지 않은 경우 DOM을 기다려야 합니다.
} else {
autoSetupTimeout(1);
부서지다;
}
}
// 동영상이 없으므로 페이지 로드가 완료될 때까지 계속 반복합니다.
} 그렇지 않으면 (!_windowLoaded) {
autoSetupTimeout(1);
}
};
/**
* autoSetup을 실행하기 전에 페이지가 로드될 때까지 기다리십시오. 이것은 호출됩니다
* `hasLoaded`가 false를 반환하는 경우 autoSetup.
*
* @param {숫자} 대기
* 대기 시간(ms)
*
* @param {모듈:비디오js} [vjs]
* videojs 라이브러리 기능
*/
기능 autoSetupTimeout(대기, vjs) {
// 브라우저가 아닌 환경에서 파손으로부터 보호
if (!Dom.isReal()) {
반품;
}
경우 (vjs) {
videojs = vjs;
}
window.setTimeout(autoSetup, wait);
}
/**
* 창 로드 상태의 내부 추적을 true로 설정하는 데 사용됩니다.
*
* @사적인
*/
함수 setWindowLoaded() {
_windowLoaded = 참;
window.removeEventListener('로드', setWindowLoaded);
}
if (Dom.isReal()) {
if (document.readyState === '완료') {
setWindowLoaded();
} else {
/**
* 창에서 로드 이벤트를 수신하고 _windowLoaded를 true로 설정합니다.
*
* 여기서는 GUID 증가를 피하기 위해 표준 이벤트 리스너를 사용합니다.
* 플레이어가 생성되기 전.
*
* @listens 로드
*/
window.addEventListener('로드', setWindowLoaded);
}
}
/**
* 창이 로드되었는지 확인
*/
const hasLoaded = 함수() {
_windowLoaded 반환;
};
내보내기 {autoSetup, autoSetupTimeout, hasLoaded};