Volume fixes and other tidy up work

This commit is contained in:
Sam Potts 2017-11-08 23:46:20 +11:00
parent c948e95ade
commit bb66be98da
9 changed files with 76 additions and 57 deletions

2
dist/plyr.js vendored

File diff suppressed because one or more lines are too long

2
dist/plyr.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
<aside class="notice"> ---
This branch is currently in beta and not production-ready. Beware: This branch is currently in beta and not production-ready
</aside> ---
# Plyr # Plyr
A simple, accessible and customizable HTML5, YouTube and Vimeo media player. A simple, accessible and customizable HTML5, YouTube and Vimeo media player.

View File

@ -63,7 +63,7 @@ const defaults = {
// Speed default and options to display // Speed default and options to display
speed: { speed: {
default: 1, selected: 1,
options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2], options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],
}, },

View File

@ -404,7 +404,7 @@ const listeners = {
// Mute // Mute
utils.on(this.elements.buttons.mute, 'click', event => utils.on(this.elements.buttons.mute, 'click', event =>
proxy(event, 'mute', () => { proxy(event, 'mute', () => {
this.muted = 'toggle'; this.muted = !this.muted;
}) })
); );

View File

@ -119,20 +119,20 @@ const vimeo = {
}); });
// Playback speed // Playback speed
let { playbackRate } = player.media; let speed = player.config.speed.selected;
Object.defineProperty(player.media, 'playbackRate', { Object.defineProperty(player.media, 'playbackRate', {
get() { get() {
return playbackRate; return speed;
}, },
set(input) { set(input) {
playbackRate = input; speed = input;
player.embed.setPlaybackRate(input); player.embed.setPlaybackRate(input);
utils.dispatchEvent.call(player, player.media, 'ratechange'); utils.dispatchEvent.call(player, player.media, 'ratechange');
}, },
}); });
// Volume // Volume
let { volume } = player.media; let { volume } = player.config;
Object.defineProperty(player.media, 'volume', { Object.defineProperty(player.media, 'volume', {
get() { get() {
return volume; return volume;
@ -156,7 +156,7 @@ const vimeo = {
}); });
// Loop // Loop
let { loop } = player.media; let { loop } = player.config;
Object.defineProperty(player.media, 'loop', { Object.defineProperty(player.media, 'loop', {
get() { get() {
return loop; return loop;

View File

@ -123,10 +123,9 @@ const youtube = {
}; };
player.media.duration = instance.getDuration(); player.media.duration = instance.getDuration();
player.media.paused = true; player.media.paused = true;
player.media.muted = instance.isMuted();
player.media.currentTime = 0;
// Seeking // Seeking
player.media.currentTime = 0;
Object.defineProperty(player.media, 'currentTime', { Object.defineProperty(player.media, 'currentTime', {
get() { get() {
return Number(instance.getCurrentTime()); return Number(instance.getCurrentTime());
@ -153,6 +152,21 @@ const youtube = {
}, },
}); });
// Quality
Object.defineProperty(player.media, 'quality', {
get() {
return instance.getPlaybackQuality();
},
set(input) {
// Trigger request event
utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {
quality: input,
});
instance.setPlaybackQuality(input);
},
});
// Volume // Volume
let volume = instance.getVolume() / 100; let volume = instance.getVolume() / 100;
Object.defineProperty(player.media, 'volume', { Object.defineProperty(player.media, 'volume', {
@ -167,6 +181,7 @@ const youtube = {
}); });
// Muted // Muted
player.media.muted = instance.isMuted();
Object.defineProperty(player.media, 'muted', { Object.defineProperty(player.media, 'muted', {
get() { get() {
return instance.isMuted(); return instance.isMuted();

View File

@ -401,13 +401,14 @@ class Plyr {
volume = min; volume = min;
} }
// Update config
this.config.volume = volume;
// Set the player volume // Set the player volume
this.media.volume = volume; this.media.volume = volume;
// Toggle muted state // Toggle muted state
if (volume === 0) { this.muted = volume === 0;
this.muted = true;
}
} }
/** /**
@ -434,11 +435,14 @@ class Plyr {
// Toggle mute // Toggle mute
set muted(mute) { set muted(mute) {
// If the method is called without parameter, toggle based on current value // If the method is called without parameter, toggle based on current value
const toggle = utils.is.boolean(mute) ? mute : !this.media.muted; const toggle = utils.is.boolean(mute) ? mute : this.config.muted;
// Set button state // Set button state
utils.toggleState(this.elements.buttons.mute, toggle); utils.toggleState(this.elements.buttons.mute, toggle);
// Update config
this.config.muted = toggle;
// Set mute on the player // Set mute on the player
this.media.muted = toggle; this.media.muted = toggle;
} }
@ -449,10 +453,15 @@ class Plyr {
// Playback speed // Playback speed
set speed(input) { set speed(input) {
// Load speed from storage or default value let speed = null;
let speed = utils.is.number(input)
? input if (utils.is.number(input)) {
: parseFloat(storage.get.call(this).speed || this.speed.selected || this.config.speed.default); speed = input;
} else if (utils.is.number(storage.get.call(this).speed)) {
({ speed } = storage.get.call(this));
} else {
speed = this.config.speed.selected;
}
// Set min/max // Set min/max
if (speed < 0.1) { if (speed < 0.1) {
@ -467,6 +476,9 @@ class Plyr {
return; return;
} }
// Update config
this.config.speed.selected = speed;
// Set media speed // Set media speed
this.media.playbackRate = speed; this.media.playbackRate = speed;
} }
@ -477,43 +489,30 @@ class Plyr {
// Set playback quality // Set playback quality
set quality(input) { set quality(input) {
// Load speed from storage or default value let quality = null;
const quality = utils.is.string(input)
? input
: parseFloat(storage.get.call(this).quality || this.config.quality.selected);
if (!this.config.quality.options.includes(quality)) { if (utils.is.string(input)) {
quality = input;
} else if (utils.is.number(storage.get.call(this).speed)) {
({ quality } = storage.get.call(this));
} else {
quality = this.config.quality.selected;
}
if (!this.options.quality.includes(quality)) {
this.warn(`Unsupported quality option (${quality})`); this.warn(`Unsupported quality option (${quality})`);
return; return;
} }
// Set media speed // Update config
switch (this.type) { this.config.quality.selected = quality;
case 'youtube':
this.utils.dispatchEvent.call(this, this.media, 'qualityrequested', false, {
quality,
});
this.embed.setPlaybackQuality(quality); // Set quality
this.media.quality = quality;
break;
default:
this.warn('Quality options are only available for YouTube');
break;
}
} }
get quality() { get quality() {
// Set media speed return this.media.quality;
switch (this.type) {
case 'youtube':
return this.embed.getPlaybackQuality();
default:
this.warn('Quality options are only available for YouTube');
return null;
}
} }
// Toggle loop // Toggle loop

View File

@ -69,16 +69,21 @@ const ui = {
// Captions // Captions
captions.setup.call(this); captions.setup.call(this);
// Set volume // Reset volume
this.volume = null; this.volume = null;
// this.muted = null;
// Set playback speed // Reset mute state
this.muted = null;
// Reset speed
this.speed = null; this.speed = null;
// Set loop // Reset loop state
this.loop = null; this.loop = null;
// Reset quality options
this.options.quality = [];
// Reset time display // Reset time display
ui.timeUpdate.call(this); ui.timeUpdate.call(this);