javascript - 在mapbox gl js中的图层上注册点击事件时如何操作事件冒泡

标签 javascript events mapbox-gl-js

如何停止层点击事件的事件传播?

mapBox.on('click', layerId, function (e) {
    console.log(e);
    // e.stopPropagation(); which is not working 
    // e.originalEvent.stopPropagation(); which is not working 
    var popupHtml = getPopupHtmlWrapper(e.features[0]);
    new mapboxgl.Popup({closeButton:false})
        .setLngLat(e.lngLat)
        .setHTML(popupHtml)
        .addTo(mapBox);
});

最佳答案

Mapbox 提供对原始事件的访问。这意味着每当我们想要限制 click只点击最顶层,我们需要做的就是调用e.originalEvent.preventDefault()在第一层并检查 e.originalEvent.defaultPrevented在下面的层中:

this.map
  .on('click', 'layer_1', function(e) { // topmost layer
    e.originalEvent.preventDefault();
    // layer_1 functionality
  })
  .on('click', 'layer_2', function(e) { // second topmost layer
    if(!e.originalEvent.defaultPrevented) {
      // click was performed outside of layer_1
      e.originalEvent.preventDefault();
      // layer_2 exclusive functionality
    }
  })
  .on('click', 'layer_3', function(e) {
    if(!e.originalEvent.defaultPrevented) {
      // click was performed outside of layer_1 and layer_2
      e.originalEvent.preventDefault();
      // layer_3 exclusive functionality here...
    }
...
  })

关于javascript - 在mapbox gl js中的图层上注册点击事件时如何操作事件冒泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47576527/

相关文章:

javascript - 显示单击了哪个列表项

qt - 如何在Qt中发出一定间隔的信号?

mapbox-gl-js - "step"表达式在 Mapbox 中如何工作?

javascript - 如何从 iframe 在新选项卡上提交表单

javascript - 表单提交页面刷新后显示隐藏的 div

Java:如何实现独立于java组件的isKeyDown()功能?

mapbox - 将 Point(或 PointLike)转换为 LngLat 对象

javascript - 为什么 Mapbox 给我 'o.createObjectURL is not a function' 错误?

javascript - 即使在 javascript 中保存了数据的副本,数据还是空的

javascript - 这是检查 URL 是否引用 JS/jQuery 中的图像的有效测试吗