diff options
author | Sam Potts <sam@potts.es> | 2019-04-15 22:08:09 +1000 |
---|---|---|
committer | Sam Potts <sam@potts.es> | 2019-04-15 22:08:09 +1000 |
commit | b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa (patch) | |
tree | 330f5df294810b19b35b41ce42750c455a809850 /src/js/plyr.js | |
parent | 243db9eda32d0ceb705b0cb99426995db071b113 (diff) | |
download | plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.tar.lz plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.tar.xz plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.zip |
Increase speed limits
Diffstat (limited to 'src/js/plyr.js')
-rw-r--r-- | src/js/plyr.js | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js index d67fae83..be1cba4b 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -25,6 +25,7 @@ import { createElement, hasClass, removeElement, replaceElement, toggleClass, wr import { off, on, once, triggerEvent, unbindListeners } from './utils/events'; import is from './utils/is'; import loadSprite from './utils/loadSprite'; +import { clamp } from './utils/numbers'; import { cloneDeep, extend } from './utils/objects'; import { getAspectRatio, reduceAspectRatio, setAspectRatio, validateRatio } from './utils/style'; import { parseUrl } from './utils/urls'; @@ -661,18 +662,9 @@ class Plyr { speed = this.config.speed.selected; } - // Set min/max - if (speed < 0.1) { - speed = 0.1; - } - if (speed > 2.0) { - speed = 2.0; - } - - if (!this.config.speed.options.includes(speed)) { - this.debug.warn(`Unsupported speed (${speed})`); - return; - } + // Clamp to min/max + const { minimumSpeed: min, maximumSpeed: max } = this; + speed = clamp(speed, min, max); // Update config this.config.speed.selected = speed; @@ -691,6 +683,42 @@ class Plyr { } /** + * Get the minimum allowed speed + */ + get minimumSpeed() { + if (this.isYouTube) { + // https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate + return Math.min(...this.options.speed); + } + + if (this.isVimeo) { + // https://github.com/vimeo/player.js/#setplaybackrateplaybackrate-number-promisenumber-rangeerrorerror + return 0.5; + } + + // https://stackoverflow.com/a/32320020/1191319 + return 0.0625; + } + + /** + * Get the maximum allowed speed + */ + get maximumSpeed() { + if (this.isYouTube) { + // https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate + return Math.max(...this.options.speed); + } + + if (this.isVimeo) { + // https://github.com/vimeo/player.js/#setplaybackrateplaybackrate-number-promisenumber-rangeerrorerror + return 2; + } + + // https://stackoverflow.com/a/32320020/1191319 + return 16; + } + + /** * Set playback quality * Currently HTML5 & YouTube only * @param {Number} input - Quality level |