/**
* @file poster-image.js
*/
從 './clickable-component.js' 導入 ClickableComponent;
從 './component.js' 導入組件;
import * as Dom from './utils/dom.js';
從'./utils/promise'導入{silencePromise};
import * as browser from './utils/browser.js';
/**
* 處理顯示玩家海報圖像的 `ClickableComponent`。
*
* @extends 可點擊組件
*/
類 PosterImage 擴展 ClickableComponent {
/**
* 創建此類的一個實例。
*
* @param {Player} 播放器
* 此類應附加到的 `Player`。
*
* @param {對象} [選項]
* 播放器選項的鍵/值存儲。
*/
構造函數(播放器,選項){
超級(播放器,選項);
這個.更新();
this.update_ = (e) => this.update(e);
player.on('posterchange', this.update_);
}
/**
* 清理並處理 `PosterImage`。
*/
處置(){
this.player().off('posterchange', this.update_);
super.dispose();
}
/**
* 創建 `PosterImage` 的 DOM 元素。
*
* @return {元素}
* 被創建的元素。
*/
創建El() {
const el = Dom.createEl('div', {
className: 'vjs-海報',
// 不希望海報是可標記的。
選項卡索引:-1
});
返回 el;
}
/**
* {@link EventTarget~EventListener} 用於 {@link Player#posterchange} 事件。
*
* @listens Player#posterchange
*
* @param {EventTarget~Event} [事件]
* 觸發此函數的 `Player#posterchange` 事件。
*/
更新(事件){
const url = this.player().poster();
this.setSrc(url);
// 如果沒有海報來源,我們應該在這個組件上顯示:none
// 所以它仍然不可點擊或右鍵點擊
如果(網址){
這個。顯示();
}其他{
這個。隱藏();
}
}
/**
* 根據顯示方式設置`PosterImage`的來源。
*
* @param {string} 網址
* `PosterImage` 來源的 URL。
*/
設置源(網址){
讓 backgroundImage = '';
// 任何虛假值都應保留為空字符串,否則
// 這會拋出一個額外的錯誤
如果(網址){
backgroundImage = `url("${url}")`;
}
this.el_.style.backgroundImage = backgroundImage;
}
/**
* {@link EventTarget~EventListener} 用於點擊 `PosterImage`。看
* {@link ClickableComponent#handleClick} 對於將被觸發的實例。
*
* @listens 水龍頭
* @listens 點擊
* @listens 按鍵
*
* @param {EventTarget~Event} 事件
+ 導致調用此函數的 `click`、`tap` 或 `keydown` 事件。
*/
handleClick(事件){
// 當控件被禁用時,我們不希望點擊觸發播放
如果(!this.player_.controls()){
返回;
}
const sourceIsEncrypted = this.player_.usingPlugin('eme') &&
這個.player_.eme.sessions &&
this.player_.eme.sessions.length > 0;
如果 (this.player_.tech(true) &&
// 我們在播放 DRM 內容時觀察到 IE 和 Edge 中的錯誤
//在視頻元素上調用 .focus () 會導致視頻變黑,
// 所以我們在特定情況下避免它
!((瀏覽器版本 || 瀏覽器 .is_Edge)&& 源加密)){
this.player_.tech(true).focus();
}
如果 (this.player_.paused()) {
silencePromise(this.player_.play());
}其他{
這個.player_.pause();
}
}
}
Component.registerComponent('PosterImage', PosterImage);
導出默認的 PosterImage;