From bd596777aaf5ca14322b3ef59704d2d7e13f6463 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> Date: Tue, 18 Feb 2020 08:13:49 +0300 Subject: [PATCH] Fix slider update by touch on iPhone/iPad (#807) --- src/elements/emby-slider/emby-slider.js | 36 ++++++++++++++++++------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index 13472b4d5d..bcadc48b70 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -254,24 +254,40 @@ define(['browser', 'dom', 'layoutManager', 'keyboardnavigation', 'css!./emby-sli cancelable: false })); - // Reset dragging (from 'input' event) so that real dragging can be detected - var range = this; - setTimeout(function () { - range.dragging = false; - }, 0); + // Prevent 'pointermove' and 'click' after 'touch*' + // FIXME: Still have some 'pointermove' and 'click' that bypass 'touchstart' + e.preventDefault(); + }, { + capture: true + }); + + dom.addEventListener(this, 'touchmove', function (e) { + if (!this.touched || e.targetTouches.length !== 1) { + return; + } + + var fraction = mapClientToFraction(this, e.targetTouches[0].clientX); + this.value = mapFractionToValue(this, fraction); + + this.dispatchEvent(new Event('input', { + bubbles: true, + cancelable: false + })); }, { passive: true }); dom.addEventListener(this, 'touchend', function (e) { - if (!this.dragging) { - this.dispatchEvent(new Event('change', { + var range = this; + + setTimeout(function () { + range.touched = false; + + range.dispatchEvent(new Event('change', { bubbles: true, cancelable: false })); - } - - this.touched = false; + }, 0); }, { passive: true });