在浏览器中使用 Mapbox GL JS,包括在 Chrome 中使用仿真模式时,事件 contextmenu 响应地图上长按/轻点操作。但是,在真实设备上,当用户在地图上轻按并保持时,此事件不会触发。
如何在 Mapbox GL JS 中监听地图上的长按操作是最好的方法?
如何在 Mapbox GL JS 中监听地图上的长按操作是最好的方法?
这里讨论了类似的问题。
我的解决方案如下:
if (Browser.isIos()) {
init_ios_context_menu();
} else {
map.on('contextmenu', (e) => {
show_context_menu_or_whatever(e);
});
} // end if
function init_ios_context_menu() {
let iosTimeout = null;
let clearIosTimeout = () => { clearTimeout(iosTimeout); };
map.on('touchstart', (e) => {
if (e.originalEvent.touches.length > 1) {
return;
}
iosTimeout = setTimeout(() => {
show_context_menu_or_whatever(e);
}, 500);
});
map.on('touchend', clearIosTimeout);
map.on('touchcancel', clearIosTimeout);
map.on('touchmove', clearIosTimeout);
map.on('pointerdrag', clearIosTimeout);
map.on('pointermove', clearIosTimeout);
map.on('moveend', clearIosTimeout);
map.on('gesturestart', clearIosTimeout);
map.on('gesturechange', clearIosTimeout);
map.on('gestureend', clearIosTimeout);
};