/**
* @文件音量控制.js
*/
從 '../../component.js' 導入組件;
從 './check-volume-support' 導入 checkVolumeSupport;
從 '../../utils/obj' 導入 {isPlain};
從 '../../utils/fn.js' 導入 {throttle, bind, UPDATE_REFRESH_INTERVAL};
// 必需的孩子
導入'./volume-bar.js';
/**
* 音量控制組件
*
* @extends 組件
*/
類 VolumeControl 擴展組件 {
/**
* 創建此類的一個實例。
*
* @param {Player} 播放器
* 此類應附加到的 `Player`。
*
* @param {對象} [選項={}]
* 播放器選項的鍵/值存儲。
*/
構造函數(播放器,選項= {}){
options.vertical = options.vertical ||錯誤的;
// 將垂直選項向下傳遞給 VolumeBar 如果
// 音量條打開。
if (typeof options.volumeBar === 'undefined' || isPlain(options.volumeBar)) {
options.volumeBar = options.volumeBar || {};
options.volumeBar.vertical = options.vertical;
}
超級(播放器,選項);
// 如果缺少音量支持,則隱藏此控件
檢查音量支持(這個,播放器);
this.throttledHandleMouseMove = throttle(bind(this, this.handleMouseMove), UPDATE_REFRESH_INTERVAL);
this.handleMouseUpHandler_ = (e) => this.handleMouseUp(e);
this.on('mousedown', (e) => this.handleMouseDown(e));
this.on('touchstart', (e) => this.handleMouseDown(e));
this.on('mousemove', (e) => this.handleMouseMove(e));
// 當滑塊處於活動狀態時(鼠標已被按下並
// 正在拖動)或處於焦點中我們不想隱藏 VolumeBar
this.on(this.volumeBar, ['focus', 'slideractive'], () => {
this.volumeBar.addClass('vjs-slider-active');
this.addClass('vjs-slider-active');
this.trigger('slideractive');
});
this.on(this.volumeBar, ['blur', 'sliderinactive'], () => {
this.volumeBar.removeClass('vjs-slider-active');
this.removeClass('vjs-slider-active');
this.trigger('sliderinactive');
});
}
/**
* 創建 `Component` 的 DOM 元素
*
* @return {元素}
* 創建的元素。
*/
創建El() {
讓 orientationClass = 'vjs-volume-horizontal';
如果(this.options_.vertical){
orientationClass = 'vjs-volume-vertical';
}
返回 super.createEl('div', {
類名:`vjs-volume-control vjs-control ${orientationClass}`
});
}
/**
* 處理 `VolumeControl` 上的 `mousedown` 或 `touchstart` 事件。
*
* @param {EventTarget~Event} 事件
* 觸發此功能的 `mousedown` 或 `touchstart` 事件
*
* @listens mousedown
* @listens touchstart
*/
handleMouseDown(事件){
const doc = this.el_.ownerDocument;
this.on(doc, 'mousemove', this.throttledHandleMouseMove);
this.on(doc, 'touchmove', this.throttledHandleMouseMove);
this.on(doc, 'mouseup', this.handleMouseUpHandler_);
this.on(doc, 'touchend', this.handleMouseUpHandler_);
}
/**
* 處理 `VolumeControl` 上的 `mouseup` 或 `touchend` 事件。
*
* @param {EventTarget~Event} 事件
* 觸發此功能的 `mouseup` 或 `touchend` 事件。
*
* @listens touchend
* @listens mouseup
*/
handleMouseUp(事件){
const doc = this.el_.ownerDocument;
this.off(doc, 'mousemove', this.throttledHandleMouseMove);
this.off(doc, 'touchmove', this.throttledHandleMouseMove);
this.off(doc, 'mouseup', this.handleMouseUpHandler_);
this.off(doc, 'touchend', this.handleMouseUpHandler_);
}
/**
* 處理 `VolumeControl` 上的 `mousedown` 或 `touchstart` 事件。
*
* @param {EventTarget~Event} 事件
* 觸發此功能的 `mousedown` 或 `touchstart` 事件
*
* @listens mousedown
* @listens touchstart
*/
handleMouseMove(事件){
this.volumeBar.handleMouseMove(事件);
}
}
/**
* `VolumeControl` 的默認選項
*
* @type {對象}
* @私人的
*/
VolumeControl.prototype.options_ = {
孩子們: [
'音量條'
]
};
Component.registerComponent('VolumeControl', VolumeControl);
導出默認音量控制;