【问题标题】:Google Maps API data layer feature. Event dragend not firedGoogle Maps API 数据层功能。事件拖动未触发
【发布时间】:2016-02-05 01:19:15
【问题描述】:

我有一个数据层:

mylayer.loadGeoJson(myGeoJsonString);
mylayer.setStyle(function(feature){
    var col = feature.getProperty('strokeColor');
    return  { strokeColor: col,
        strokeWeight: 3,
        fillOpacity: 0,
        clickable: true,
        draggable: true             
    }
});

每个要素都可以通过鼠标拖动操作在地图上移动,但如果我尝试为 dragend 事件添加侦听器:

    mylayer.addListener('dragend', function(event) {
        if (confirm("Do you really want to move it?")) {
            console.log ("Moved, need to update spatial DB...");
        }
    }); 

但事件不会触发(也使用 Google Chrome 调试控制台断点进行检查)。

我哪里错了?

【问题讨论】:

    标签: google-maps google-maps-api-3


    【解决方案1】:

    Google Maps Javascript API Data Layer 上没有 dragend 事件

    查看此答案以了解可用事件:What events are available for google.maps.data.addListener?documentation

    可用事件:

    • 添加功能
    • 点击
    • 鼠标按下
    • 鼠标移出
    • 鼠标悬停
    • 鼠标移动
    • 删除功能
    • 删除属性
    • 右键设置几何体
    • 设置属性

    【讨论】:

    • 谢谢,您知道使用 mousedown 和 mouseup 事件检测拖动结束的好习惯吗?
    • mousedown 和 mouseup 事件具有作为事件对象一部分的特性。因此,您可以在触发 mousedown 时将对象的 ID 存储在侧面。当 mouseup 触发时,您可以查看 ID 是否匹配以及几何是否不同。如果几何图形不同,您就知道这是一个拖动事件,而不仅仅是一次单击。您还可以检查几何的最小变化量,以避免意外的轻微拖动和过度点击。
    【解决方案2】:

    当您调用数据层 API 时,您可以在调用完成时收到调用的状态,并通过侦听器侦听调用最终做出的任何更改。

    您会注意到对数据层 API 的调用有时会返回“PendingResult”。一旦创建了“PendingResult”,操作就会在后台排队,因此 PendingResult 让您可以等待结果状态,同步 em> 或 异步

    如果您的代码在主 UI 线程上运行,请不要对 Data LayerAPI 进行阻塞调用。您可以通过向 PendingResult 添加回调方法来异步运行调用。

    如果您的代码在后台服务中的单独处理程序线程上运行,则可以阻止调用。在这种情况下,您可以在 PendingResult 上调用“await()'。

    有关事件处理的更多信息,请点击此链接:https://developers.google.com/maps/documentation/javascript/examples/layer-data-event

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多