Merge pull request #4131 from Leaflet/chrome-win10-dblclick
Possible fix for #4127, assume dblclick DOM event exists in touch-capable browsers
This commit is contained in:
commit
50539d6fe5
72
debug/tests/doubleclick-events-slowdown.html
Normal file
72
debug/tests/doubleclick-events-slowdown.html
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Leaflet debug page</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../../dist/leaflet.css" />
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../css/screen.css" />
|
||||||
|
|
||||||
|
<script type="text/javascript" src="../../build/deps.js"></script>
|
||||||
|
<script src="../leaflet-include.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<p>This test is meant for testing the performance of doubleclick event handler in IE. See <a href='https://github.com/Leaflet/Leaflet/issues/4127'>#4127</a> and <a href='https://github.com/Leaflet/Leaflet/issues/2820'>#2820</a></p>
|
||||||
|
|
||||||
|
<div id="map"></div>
|
||||||
|
<button id="populate">Populate with 100 more markers</button><div id='perf'></div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||||
|
osmAttrib = '© <a href="http://openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||||
|
osm = L.tileLayer(osmUrl, {maxZoom: 18, attribution: osmAttrib});
|
||||||
|
|
||||||
|
var map = L.map('map')
|
||||||
|
.setView([0, 0], 0)
|
||||||
|
.addLayer(osm);
|
||||||
|
|
||||||
|
var markers = new L.FeatureGroup();
|
||||||
|
|
||||||
|
function getEventHandler(i) {
|
||||||
|
return function(ev) { document.getElementById('perf').innerHTML = ('Event on marker ' + i + ': ' + ev.type); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function populate() {
|
||||||
|
var start = performance ? performance.now() : 0;
|
||||||
|
|
||||||
|
for (var i = 0; i < 100; i++) {
|
||||||
|
L.marker(getRandomLatLng(map)).addTo(markers).on('dblclick', getEventHandler(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
var end = performance ? performance.now() : 0;
|
||||||
|
|
||||||
|
document.getElementById('perf').innerHTML = 'Adding 100 markers took ' + (end - start) + ' milliseconds.';
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
markers.addTo(map);
|
||||||
|
|
||||||
|
populate();
|
||||||
|
L.DomUtil.get('populate').onclick = populate;
|
||||||
|
|
||||||
|
function logEvent(e) { console.log(e.type); }
|
||||||
|
|
||||||
|
// map.on('click', logEvent);
|
||||||
|
// map.on('contextmenu', logEvent);
|
||||||
|
|
||||||
|
// map.on('movestart', logEvent);
|
||||||
|
// map.on('move', logEvent);
|
||||||
|
// map.on('moveend', logEvent);
|
||||||
|
|
||||||
|
// map.on('zoomstart', logEvent);
|
||||||
|
// map.on('zoomend', logEvent);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -57,18 +57,32 @@ L.extend(L.DomEvent, {
|
|||||||
|
|
||||||
obj[pre + touchstart + id] = onTouchStart;
|
obj[pre + touchstart + id] = onTouchStart;
|
||||||
obj[pre + touchend + id] = onTouchEnd;
|
obj[pre + touchend + id] = onTouchEnd;
|
||||||
|
obj[pre + 'dblclick' + id] = handler;
|
||||||
|
|
||||||
obj.addEventListener(touchstart, onTouchStart, false);
|
obj.addEventListener(touchstart, onTouchStart, false);
|
||||||
obj.addEventListener(touchend, onTouchEnd, false);
|
obj.addEventListener(touchend, onTouchEnd, false);
|
||||||
|
|
||||||
|
// On some platforms (notably, chrome on win10 + touchscreen + mouse),
|
||||||
|
// the browser doesn't fire touchend/pointerup events but does fire
|
||||||
|
// native dblclicks. See #4127.
|
||||||
|
if (!L.Browser.edge) {
|
||||||
|
obj.addEventListener('dblclick', handler, false);
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
removeDoubleTapListener: function (obj, id) {
|
removeDoubleTapListener: function (obj, id) {
|
||||||
var pre = '_leaflet_',
|
var pre = '_leaflet_',
|
||||||
touchend = obj[pre + this._touchend + id];
|
touchstart = obj[pre + this._touchstart + id],
|
||||||
|
touchend = obj[pre + this._touchend + id],
|
||||||
|
dblclick = obj[pre + 'dblclick' + id];
|
||||||
|
|
||||||
obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false);
|
obj.removeEventListener(this._touchstart, touchstart, false);
|
||||||
obj.removeEventListener(this._touchend, touchend, false);
|
obj.removeEventListener(this._touchend, touchend, false);
|
||||||
|
if (!L.Browser.edge) {
|
||||||
|
obj.removeEventListener('dblclick', dblclick, false);
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user