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 | |
| parent | 243db9eda32d0ceb705b0cb99426995db071b113 (diff) | |
| download | plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.tar.lz plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.tar.xz plyr-b2fff4c33f45c8e61bbe1f6549e69ef46ef8b2fa.zip | |
Increase speed limits
Diffstat (limited to 'src')
| -rw-r--r-- | src/js/plyr.js | 52 | ||||
| -rw-r--r-- | src/js/utils/numbers.js | 17 | 
2 files changed, 57 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 diff --git a/src/js/utils/numbers.js b/src/js/utils/numbers.js new file mode 100644 index 00000000..f6eb65c8 --- /dev/null +++ b/src/js/utils/numbers.js @@ -0,0 +1,17 @@ +/** + * Returns a number whose value is limited to the given range. + * + * Example: limit the output of this computation to between 0 and 255 + * (x * 255).clamp(0, 255) + * + * @param {Number} input + * @param {Number} min The lower boundary of the output range + * @param {Number} max The upper boundary of the output range + * @returns A number in the range [min, max] + * @type Number + */ +export function clamp(input = 0, min = 0, max = 255) { +    return Math.min(Math.max(input, min), max); +} + +export default { clamp }; | 
