2

当检测到长按时,我正在尝试以编程方式在移动 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);
  });

任何想法,如果这是可能的以及如何实现它?

4

0 回答 0