当检测到长按时,我正在尝试以编程方式在移动 iOS 设备上打开ol-contextmenu 。
上下文菜单通常在右键单击时打开。在 Android 上,它也适用于长按。根据这个答案,在 iOS 上,触摸事件不作为鼠标事件类型处理,这似乎只由 ol-contextmenu 库处理。
在库的问题中,建议以编程方式触发菜单。不幸的是,我无法弄清楚如何实现这一目标。通常,该事件似乎是在 libray 内部处理的,并且没有我可以调用的 contextmenu.open() 之类的函数。
现在,我这样做:
var map = new ol.Map({
// ....
});
var contextmenu = new ContextMenu({
width: 180,
defaultItems: true
});
map.addControl(contextmenu);
contextmenu.on('open', function (evt) {
// do something
}
我添加了一个触摸处理程序,但我无法以编程方式打开上下文菜单。
$('.map')
.on("touchstart", function(event){
// Prevent default behavior
event.preventDefault();
// Timer for long touch detection
timerLongTouch = setTimeout(function() {
// Flag for preventing "normal touch event" trigger when touch ends.
longTouch = true;
// I have tried different triggers, but without success so far
// $('.map').dispatchEvent(new CustomEvent('contextmenu'));
// $('.map').trigger('contextmenu');
// $('.map').triggerHandler('contextmenu');
// contextmenu.trigger("open");
// contextmenu.triggerHandler("open");
}, 1000);
});
任何想法,如果这是可能的以及如何实现它?