Merge pull request #1533 from sasensi/Fix_#1501_errors_with_event_listeners_on_mobile

Fix #1501 errors with event listeners on mobile
This commit is contained in:
Jürg Lehni 2018-10-03 10:22:49 +02:00 committed by GitHub
commit 9201ea973e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 3 deletions

View file

@ -23,8 +23,19 @@ var DomEvent = /** @lends DomEvent */{
for (var type in events) { for (var type in events) {
var func = events[type], var func = events[type],
parts = type.split(/[\s,]+/g); parts = type.split(/[\s,]+/g);
for (var i = 0, l = parts.length; i < l; i++) for (var i = 0, l = parts.length; i < l; i++) {
el.addEventListener(parts[i], func, false); var name = parts[i];
// For touchstart/touchmove events on document, we need to
// explicitely declare that event is not passive (can be
// prevented). Otherwise chrome browser would ignore
// event.preventDefault() calls. See #1501 and
// https://www.chromestatus.com/features/5093566007214080
var options = (
el === document
&& (name === 'touchstart' || name === 'touchmove')
) ? { passive: false } : false;
el.addEventListener(name, func, options);
}
} }
} }
}, },

View file

@ -1440,8 +1440,16 @@ new function() { // Injection scope for event handling on the browser
// which can call `preventDefault()` explicitly or return `false`. // which can call `preventDefault()` explicitly or return `false`.
// - If this is a unhandled mousedown event, but the view or tools // - If this is a unhandled mousedown event, but the view or tools
// respond to mouseup. // respond to mouseup.
if (called && !mouse.move || mouse.down && responds('mouseup')) //
// Some events are not cancelable anyway (like during a scroll
// inertia on mobile) so trying to prevent default in those case
// would result in no effect and an error.
if (
event.cancelable !== false
&& (called && !mouse.move || mouse.down && responds('mouseup'))
) {
event.preventDefault(); event.preventDefault();
}
}, },
/** /**