Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
Generated
Vendored
Executable
+86
@@ -0,0 +1,86 @@
|
||||
import * as Browser from '../core/Browser';
|
||||
import {_pointersCount} from './DomEvent.Pointer';
|
||||
|
||||
/*
|
||||
* Extends the event handling code with double tap support for mobile browsers.
|
||||
*/
|
||||
|
||||
var _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';
|
||||
var _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';
|
||||
var _pre = '_leaflet_';
|
||||
|
||||
// inspired by Zepto touch code by Thomas Fuchs
|
||||
export function addDoubleTapListener(obj, handler, id) {
|
||||
var last, touch,
|
||||
doubleTap = false,
|
||||
delay = 250;
|
||||
|
||||
function onTouchStart(e) {
|
||||
var count;
|
||||
|
||||
if (Browser.pointer) {
|
||||
if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
|
||||
count = _pointersCount;
|
||||
} else {
|
||||
count = e.touches.length;
|
||||
}
|
||||
|
||||
if (count > 1) { return; }
|
||||
|
||||
var now = Date.now(),
|
||||
delta = now - (last || now);
|
||||
|
||||
touch = e.touches ? e.touches[0] : e;
|
||||
doubleTap = (delta > 0 && delta <= delay);
|
||||
last = now;
|
||||
}
|
||||
|
||||
function onTouchEnd(e) {
|
||||
if (doubleTap && !touch.cancelBubble) {
|
||||
if (Browser.pointer) {
|
||||
if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
|
||||
// work around .type being readonly with MSPointer* events
|
||||
var newTouch = {},
|
||||
prop, i;
|
||||
|
||||
for (i in touch) {
|
||||
prop = touch[i];
|
||||
newTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;
|
||||
}
|
||||
touch = newTouch;
|
||||
}
|
||||
touch.type = 'dblclick';
|
||||
handler(touch);
|
||||
last = null;
|
||||
}
|
||||
}
|
||||
|
||||
obj[_pre + _touchstart + id] = onTouchStart;
|
||||
obj[_pre + _touchend + id] = onTouchEnd;
|
||||
obj[_pre + 'dblclick' + id] = handler;
|
||||
|
||||
obj.addEventListener(_touchstart, onTouchStart, false);
|
||||
obj.addEventListener(_touchend, onTouchEnd, false);
|
||||
|
||||
// On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),
|
||||
// the browser doesn't fire touchend/pointerup events but does fire
|
||||
// native dblclicks. See #4127.
|
||||
// Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.
|
||||
obj.addEventListener('dblclick', handler, false);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
export function removeDoubleTapListener(obj, id) {
|
||||
var touchstart = obj[_pre + _touchstart + id],
|
||||
touchend = obj[_pre + _touchend + id],
|
||||
dblclick = obj[_pre + 'dblclick' + id];
|
||||
|
||||
obj.removeEventListener(_touchstart, touchstart, false);
|
||||
obj.removeEventListener(_touchend, touchend, false);
|
||||
if (!Browser.edge) {
|
||||
obj.removeEventListener('dblclick', dblclick, false);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
Reference in new issue
Block a user