/**
* @file volume-level-tooltip.js
*/
從 '../../component' 導入組件;
import * as Dom from '../../utils/dom.js';
從 '../../utils/fn.js' 導入 * 作為 Fn;
/**
* 音量級別工具提示在音量條上方或併排顯示音量。
*
* @extends 組件
*/
類 VolumeLevelTooltip 擴展組件 {
/**
* 創建此類的一個實例。
*
* @param {Player} 播放器
* 此類應附加到的 {@link Player}。
*
* @param {對象} [選項]
* 播放器選項的鍵/值存儲。
*/
構造函數(播放器,選項){
超級(播放器,選項);
this.update = Fn.throttle(Fn.bind(this, this.update), Fn.UPDATE_REFRESH_INTERVAL);
}
/**
* 創建體積工具提示 DOM 元素
*
* @return {元素}
* 創建的元素。
*/
創建El() {
返回 super.createEl('div', {
類名:'vjs-volume-tooltip'
},{
'aria-hidden': 'true'
});
}
/**
* 更新工具提示相對於 `VolumeBar` 的位置和
* 其內容文本。
*
* @param {Object} rangeBarRect
* {@link VolumeBar} 元素的 `ClientRect`。
*
* @param {number} rangeBarPoint
* 0到1之間的數字,代表水平/垂直參考點
* 從 {@link VolumeBar} 的左邊緣
*
* @param {boolean} 垂直
* 音量控制位置的裁判
* 在控制欄中{@link VolumeControl}
*
*/
更新(rangeBarRect,rangeBarPoint,垂直,內容){
如果(!垂直){
const tooltipRect = Dom.getBoundingClientRect(this.el_);
const playerRect = Dom.getBoundingClientRect(this.player_.el());
const volumeBarPointPx = rangeBarRect.width * rangeBarPoint;
如果(!playerRect ||!tooltipRect){
返回;
}
const spaceLeftOfPoint = (rangeBarRect.left - playerRect.left) + volumeBarPointPx;
常量 spaceRightOfPoint = (rangeBarRect.width - volumeBarPointPx) +
(playerRect.right - rangeBarRect.right);
讓 pullTooltipBy = tooltipRect.width / 2;
if (spaceLeftOfPoint < pullTooltipBy) {
pullTooltipBy += pullTooltipBy - spaceLeftOfPoint;
} else if (spaceRightOfPoint < pullTooltipBy) {
pullTooltipBy = spaceRightOfPoint;
}
if (pullTooltipBy < 0) {
pullTooltipBy = 0;
} else if (pullTooltipBy > tooltipRect.width) {
pullTooltipBy = tooltipRect.width;
}
this.el_.style.right = `-${pullTooltipBy}px`;
}
this.write(`${content}%`);
}
/**
* 將音量寫入工具提示 DOM 元素。
*
* @param {string} 內容
* 工具提示的格式化體積。
*/
寫(內容){
Dom.textContent(this.el_, content);
}
/**
* 更新音量工具提示相對於 `VolumeBar` 的位置。
*
* @param {Object} rangeBarRect
* {@link VolumeBar} 元素的 `ClientRect`。
*
* @param {number} rangeBarPoint
* 0到1之間的數字,代表水平/垂直參考點
* 從 {@link VolumeBar} 的左邊緣
*
* @param {boolean} 垂直
* 音量控制位置的裁判
* 在控制欄中{@link VolumeControl}
*
* @param {number} 音量
* 將工具提示更新到的音量級別
*
* @param {函數} cb
* 將在請求動畫幀期間調用的函數
* 對於需要在默認情況下執行額外動畫的工具提示
*/
updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, cb) {
this.requestNamedAnimationFrame('VolumeLevelTooltip#updateVolume', () => {
this.update(rangeBarRect, rangeBarPoint, vertical, volume.toFixed(0));
如果(cb){
cb();
}
});
}
}
Component.registerComponent('VolumeLevelTooltip', VolumeLevelTooltip);
導出默認的 VolumeLevelTooltip;