/** * @file mouse-volume-level-display.js */ import Component from '../../component.js'; import * as Fn from '../../utils/fn.js'; import './volume-level-tooltip'; /** * The {@link MouseVolumeLevelDisplay} component tracks mouse movement over the * {@link VolumeControl}. It displays an indicator and a {@link VolumeLevelTooltip} * indicating the volume level which is represented by a given point in the * {@link VolumeBar}. * * @extends Component */ class MouseVolumeLevelDisplay extends Component { /** * Creates an instance of this class. * * @param { import('../../player').default } player * The {@link Player} that this class should be attached to. * * @param {Object} [options] * The key/value store of player options. */ constructor(player, options) { super(player, options); this.update = Fn.throttle(Fn.bind_(this, this.update), Fn.UPDATE_REFRESH_INTERVAL); } /** * Create the DOM element for this class. * * @return {Element} * The element that was created. */ createEl() { return super.createEl('div', { className: 'vjs-mouse-display' }); } /** * Enquires updates to its own DOM as well as the DOM of its * {@link VolumeLevelTooltip} child. * * @param {Object} rangeBarRect * The `ClientRect` for the {@link VolumeBar} element. * * @param {number} rangeBarPoint * A number from 0 to 1, representing a horizontal/vertical reference point * from the left edge of the {@link VolumeBar} * * @param {boolean} vertical * Referees to the Volume control position * in the control bar{@link VolumeControl} * */ update(rangeBarRect, rangeBarPoint, vertical) { const volume = 100 * rangeBarPoint; this.getChild('volumeLevelTooltip').updateVolume(rangeBarRect, rangeBarPoint, vertical, volume, () => { if (vertical) { this.el_.style.bottom = `${rangeBarRect.height * rangeBarPoint}px`; } else { this.el_.style.left = `${rangeBarRect.width * rangeBarPoint}px`; } }); } } /** * Default options for `MouseVolumeLevelDisplay` * * @type {Object} * @private */ MouseVolumeLevelDisplay.prototype.options_ = { children: [ 'volumeLevelTooltip' ] }; Component.registerComponent('MouseVolumeLevelDisplay', MouseVolumeLevelDisplay); export default MouseVolumeLevelDisplay;