1 | import * as Browser from '../core/Browser';
|
2 | import {_pointersCount} from './DomEvent.Pointer';
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | var _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';
|
9 | var _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';
|
10 | var _pre = '_leaflet_';
|
11 |
|
12 |
|
13 | export function addDoubleTapListener(obj, handler, id) {
|
14 | var last, touch,
|
15 | doubleTap = false,
|
16 | delay = 250;
|
17 |
|
18 | function onTouchStart(e) {
|
19 | var count;
|
20 |
|
21 | if (Browser.pointer) {
|
22 | if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
|
23 | count = _pointersCount;
|
24 | } else {
|
25 | count = e.touches.length;
|
26 | }
|
27 |
|
28 | if (count > 1) { return; }
|
29 |
|
30 | var now = Date.now(),
|
31 | delta = now - (last || now);
|
32 |
|
33 | touch = e.touches ? e.touches[0] : e;
|
34 | doubleTap = (delta > 0 && delta <= delay);
|
35 | last = now;
|
36 | }
|
37 |
|
38 | function onTouchEnd(e) {
|
39 | if (doubleTap && !touch.cancelBubble) {
|
40 | if (Browser.pointer) {
|
41 | if ((!Browser.edge) || e.pointerType === 'mouse') { return; }
|
42 |
|
43 | var newTouch = {},
|
44 | prop, i;
|
45 |
|
46 | for (i in touch) {
|
47 | prop = touch[i];
|
48 | newTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;
|
49 | }
|
50 | touch = newTouch;
|
51 | }
|
52 | touch.type = 'dblclick';
|
53 | touch.button = 0;
|
54 | handler(touch);
|
55 | last = null;
|
56 | }
|
57 | }
|
58 |
|
59 | obj[_pre + _touchstart + id] = onTouchStart;
|
60 | obj[_pre + _touchend + id] = onTouchEnd;
|
61 | obj[_pre + 'dblclick' + id] = handler;
|
62 |
|
63 | obj.addEventListener(_touchstart, onTouchStart, false);
|
64 | obj.addEventListener(_touchend, onTouchEnd, false);
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 | obj.addEventListener('dblclick', handler, false);
|
71 |
|
72 | return this;
|
73 | }
|
74 |
|
75 | export function removeDoubleTapListener(obj, id) {
|
76 | var touchstart = obj[_pre + _touchstart + id],
|
77 | touchend = obj[_pre + _touchend + id],
|
78 | dblclick = obj[_pre + 'dblclick' + id];
|
79 |
|
80 | obj.removeEventListener(_touchstart, touchstart, false);
|
81 | obj.removeEventListener(_touchend, touchend, false);
|
82 | if (!Browser.edge) {
|
83 | obj.removeEventListener('dblclick', dblclick, false);
|
84 | }
|
85 |
|
86 | return this;
|
87 | }
|