src/js/control-bar/volume-control/volume-bar.js
/**
* @file volume-bar.js
*/
import Slider from '../../slider/slider.js';
import Component from '../../component.js';
import * as Fn from '../../utils/fn.js';
// Required children
import VolumeLevel from './volume-level.js';
/**
* The bar that contains the volume level and can be clicked on to adjust the level
*
* @param {Player|Object} player
* @param {Object=} options
* @extends Slider
* @class VolumeBar
*/
class VolumeBar extends Slider {
constructor(player, options){
super(player, options);
this.on(player, 'volumechange', this.updateARIAAttributes);
player.ready(Fn.bind(this, this.updateARIAAttributes));
}
/**
* Create the component's DOM element
*
* @return {Element}
* @method createEl
*/
createEl() {
return super.createEl('div', {
className: 'vjs-volume-bar vjs-slider-bar'
}, {
'aria-label': 'volume level'
});
}
/**
* Handle mouse move on volume bar
*
* @method handleMouseMove
*/
handleMouseMove(event) {
this.checkMuted();
this.player_.volume(this.calculateDistance(event));
}
checkMuted() {
if (this.player_.muted()) {
this.player_.muted(false);
}
}
/**
* Get percent of volume level
*
* @retun {Number} Volume level percent
* @method getPercent
*/
getPercent() {
if (this.player_.muted()) {
return 0;
} else {
return this.player_.volume();
}
}
/**
* Increase volume level for keyboard users
*
* @method stepForward
*/
stepForward() {
this.checkMuted();
this.player_.volume(this.player_.volume() + 0.1);
}
/**
* Decrease volume level for keyboard users
*
* @method stepBack
*/
stepBack() {
this.checkMuted();
this.player_.volume(this.player_.volume() - 0.1);
}
/**
* Update ARIA accessibility attributes
*
* @method updateARIAAttributes
*/
updateARIAAttributes() {
// Current value of volume bar as a percentage
let volume = (this.player_.volume() * 100).toFixed(2);
this.el_.setAttribute('aria-valuenow', volume);
this.el_.setAttribute('aria-valuetext', volume + '%');
}
}
VolumeBar.prototype.options_ = {
children: [
'volumeLevel'
],
'barName': 'volumeLevel'
};
VolumeBar.prototype.playerEvent = 'volumechange';
Component.registerComponent('VolumeBar', VolumeBar);
export default VolumeBar;