From b55306cd6548b7253df4d9343f2b44078d4d7042 Mon Sep 17 00:00:00 2001 From: Michael Thies Date: Thu, 17 Jun 2021 18:26:14 +0200 Subject: [PATCH 1/4] feat(slider): Allow disabling touch-/mouse-sliding on the track --- src/definitions/modules/slider.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/definitions/modules/slider.js b/src/definitions/modules/slider.js index 77c8cbef9b..1faff5d7b0 100644 --- a/src/definitions/modules/slider.js +++ b/src/definitions/modules/slider.js @@ -252,12 +252,22 @@ $.fn.slider = function(parameters) { }, mouseEvents: function() { module.verbose('Binding mouse events'); - $module.find('.track, .thumb, .inner').on('mousedown' + eventNamespace, function(event) { + var downElements = settings.slideEverywhere ? '.thumb,.inner,.track' : '.thumb'; + $module.find(downElements).on('mousedown' + eventNamespace, function(event) { event.stopImmediatePropagation(); event.preventDefault(); module.event.down(event); }); - $module.on('mousedown' + eventNamespace, module.event.down); + if(!settings.slideEverywhere) { + $module.find('.track, .inner').on('click' + eventNamespace, function(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + module.event.up(event); + }); + $module.on('click' + eventNamespace, module.event.up); + } else { + $module.on('mousedown' + eventNamespace, module.event.down); + } $module.on('mouseenter' + eventNamespace, function(event) { isHover = true; }); @@ -267,12 +277,15 @@ $.fn.slider = function(parameters) { }, touchEvents: function() { module.verbose('Binding touch events'); - $module.find('.track, .thumb, .inner').on('touchstart' + eventNamespace, function(event) { + var downElements = settings.slideEverywhere ? '.thumb,.inner,.track' : '.thumb'; + $module.find(downElements).on('touchstart' + eventNamespace, function(event) { event.stopImmediatePropagation(); event.preventDefault(); module.event.down(event); }); - $module.on('touchstart' + eventNamespace, module.event.down); + if(!slideEverywhere) { + $module.on('touchstart' + eventNamespace, module.event.down); + } }, slidingEvents: function() { // these don't need the identifier because we only ever want one of them to be registered with document @@ -1295,6 +1308,7 @@ $.fn.slider.settings = { preventCrossover : true, fireOnInit : false, interpretLabel : false, + slideEverywhere : true, // If false, only allow clicking, not sliding on the track //the decimal place to round to if step is undefined decimalPlaces : 2, From fe02b894d3b6ff3fc2e37a207f472d335608793f Mon Sep 17 00:00:00 2001 From: Michael Thies Date: Thu, 17 Jun 2021 20:59:30 +0200 Subject: [PATCH 2/4] fix(slider): Fix reference to slideEverywhere setting --- src/definitions/modules/slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/definitions/modules/slider.js b/src/definitions/modules/slider.js index 1faff5d7b0..9aaa30a5b8 100644 --- a/src/definitions/modules/slider.js +++ b/src/definitions/modules/slider.js @@ -283,7 +283,7 @@ $.fn.slider = function(parameters) { event.preventDefault(); module.event.down(event); }); - if(!slideEverywhere) { + if(!settings.slideEverywhere) { $module.on('touchstart' + eventNamespace, module.event.down); } }, From b48c4f69718c8f777df8f4a36dc89a9b211fc3a9 Mon Sep 17 00:00:00 2001 From: Michael Thies Date: Sat, 19 Jun 2021 13:46:36 +0200 Subject: [PATCH 3/4] fix(slider): Fix touch event handling with \!slideEverywhere --- src/definitions/modules/slider.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/definitions/modules/slider.js b/src/definitions/modules/slider.js index 9aaa30a5b8..2675a7d617 100644 --- a/src/definitions/modules/slider.js +++ b/src/definitions/modules/slider.js @@ -284,6 +284,13 @@ $.fn.slider = function(parameters) { module.event.down(event); }); if(!settings.slideEverywhere) { + $module.find('.track, .inner').on('click' + eventNamespace, function(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + module.event.up(event); + }); + $module.on('click' + eventNamespace, module.event.up); + } else { $module.on('touchstart' + eventNamespace, module.event.down); } }, @@ -779,7 +786,7 @@ $.fn.slider = function(parameters) { return value; }, eventPos: function(event) { - if(module.is.touch()) { + if(event.type !== 'click') { var touchEvent = event.changedTouches ? event : event.originalEvent, touches = touchEvent.changedTouches[0] ? touchEvent.changedTouches : touchEvent.touches, From d2df3c1feea6594f627e096d9f96f58f490efd0b Mon Sep 17 00:00:00 2001 From: Michael Thies Date: Sun, 20 Jun 2021 13:37:07 +0200 Subject: [PATCH 4/4] fix(slider): Fix broken eventPos function for mouse events --- src/definitions/modules/slider.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/definitions/modules/slider.js b/src/definitions/modules/slider.js index 2675a7d617..958a0bea3a 100644 --- a/src/definitions/modules/slider.js +++ b/src/definitions/modules/slider.js @@ -786,7 +786,11 @@ $.fn.slider = function(parameters) { return value; }, eventPos: function(event) { - if(event.type !== 'click') { + // unwrap jQuery event objects + if(!(event.pageX || event.changedTouches)) { + event = event.originalEvent; + } + if(event.changedTouches) { var touchEvent = event.changedTouches ? event : event.originalEvent, touches = touchEvent.changedTouches[0] ? touchEvent.changedTouches : touchEvent.touches,