From 798a6798427a6b40348284245dfd8ca505773959 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Fri, 14 Feb 2020 00:31:08 +0300 Subject: [PATCH] Fix slider update by touch on iPhone/iPad --- src/elements/emby-slider/emby-slider.js | 43 ++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index 8026f001e..13472b4d5 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -75,7 +75,8 @@ define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-sli function updateValues() { // Do not update values when dragging with keyboard to keep current progress for reference - if (!!this.keyboardDragging) { + // Do not update values when touched to keep current progress for reference + if (!!this.keyboardDragging || !!this.touched) { return; } @@ -236,6 +237,46 @@ define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-sli passive: true }); + // HACK: iPhone/iPad do not change input by touch + if (browser.iOS) { + dom.addEventListener(this, 'touchstart', function (e) { + if (e.targetTouches.length !== 1) { + return; + } + + this.touched = true; + + var fraction = mapClientToFraction(this, e.targetTouches[0].clientX); + this.value = mapFractionToValue(this, fraction); + + this.dispatchEvent(new Event('input', { + bubbles: true, + cancelable: false + })); + + // Reset dragging (from 'input' event) so that real dragging can be detected + var range = this; + setTimeout(function () { + range.dragging = false; + }, 0); + }, { + passive: true + }); + + dom.addEventListener(this, 'touchend', function (e) { + if (!this.dragging) { + this.dispatchEvent(new Event('change', { + bubbles: true, + cancelable: false + })); + } + + this.touched = false; + }, { + passive: true + }); + } + if (supportsValueSetOverride) { this.addEventListener('valueset', updateValues); } else {