Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit 0a19b31

Browse files
committed
fix(slider): Guard against unnecessary touch events in IE as they are unnecessary
1 parent 128cf93 commit 0a19b31

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

packages/mdc-slider/continuous/foundation.js

+29-23
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ export default class MDCSliderFoundation extends MDCFoundation {
3030

3131
static get defaultAdapter() {
3232
return {
33-
addClass: (/* className: string */) => {},
34-
removeClass: (/* className: string */) => {},
35-
hasClass: (/* className: string */) => {},
36-
addInputClass: (/* className: string */) => {},
37-
removeInputClass: (/* className: string */) => {},
38-
getNativeInput: (/* HTMLInputElement */) => {},
39-
registerHandler: (/* type: string, handler: EventListener */) => {},
40-
deregisterHandler: (/* type: string, handler: EventListener */) => {},
41-
registerRootHandler: (/* type: string, handler: EventListener */) => {},
42-
deregisterRootHandler: (/* type: string, handler: EventListener */) => {},
43-
setAttr: (/* name: string, value: string */) => {},
44-
setLowerStyle: (/* name: string, value: number */) => {},
45-
setUpperStyle: (/* name: string, value: number */) => {},
46-
hasNecessaryDom: (/* boolean */) => false,
47-
notifyChange: (/* evtData: {value: number} */) => {},
48-
detectIsIE: (/* boolean */) => {},
33+
addClass: ( /* className: string */ ) => {},
34+
removeClass: ( /* className: string */ ) => {},
35+
hasClass: ( /* className: string */ ) => {},
36+
addInputClass: ( /* className: string */ ) => {},
37+
removeInputClass: ( /* className: string */ ) => {},
38+
getNativeInput: ( /* HTMLInputElement */ ) => {},
39+
registerHandler: ( /* type: string, handler: EventListener */ ) => {},
40+
deregisterHandler: ( /* type: string, handler: EventListener */ ) => {},
41+
registerRootHandler: ( /* type: string, handler: EventListener */ ) => {},
42+
deregisterRootHandler: ( /* type: string, handler: EventListener */ ) => {},
43+
setAttr: ( /* name: string, value: string */ ) => {},
44+
setLowerStyle: ( /* name: string, value: number */ ) => {},
45+
setUpperStyle: ( /* name: string, value: number */ ) => {},
46+
hasNecessaryDom: ( /* boolean */ ) => false,
47+
notifyChange: ( /* evtData: {value: number} */ ) => {},
48+
detectIsIE: ( /* boolean */ ) => {},
4949
};
5050
}
5151

@@ -106,7 +106,8 @@ export default class MDCSliderFoundation extends MDCFoundation {
106106
}
107107

108108
handleTouchMove_(event) {
109-
if (event.pointerType && event.pointerType !== 'touch') {
109+
// IE handles events on input[range] so no additional help is needed here
110+
if (this.isIE_ || (event.pointerType && event.pointerType !== 'touch')) {
110111
return;
111112
}
112113

@@ -121,13 +122,18 @@ export default class MDCSliderFoundation extends MDCFoundation {
121122

122123
// create a new event on the slider element to ensure
123124
// listeners receive the input event
125+
let newEvent;
126+
127+
// Only if browser supports new Event
128+
if (typeof Event === 'function') {
129+
newEvent = new Event('input', {
130+
target: event.target,
131+
buttons: event.buttons,
132+
clientX: eventclientX,
133+
clientY: rect.top,
134+
});
135+
}
124136

125-
const newEvent = new Event('input', {
126-
target: event.target,
127-
buttons: event.buttons,
128-
clientX: eventclientX,
129-
clientY: rect.top,
130-
});
131137
input_.dispatchEvent(newEvent);
132138
}
133139

0 commit comments

Comments
 (0)