【问题标题】:Open Layers 3 Zoom map event handler打开第 3 层缩放地图事件处理程序
【发布时间】:2014-11-04 11:53:14
【问题描述】:

我需要在 Open Layers 3 中处理缩放事件。

以下是我的代码:

map_object = new ol.Map({
target: 'map',
controls: controls_list,
interactions: interactions_list,
overlays: [overlay],
layers: [OSM_raster, WFS_layer],
    view: view
});


map_object.on("Zoom", function() {
  console.log('Zooming...');
});

此代码运行没有错误并显示地图,但没有输出到控制台,表明此函数未触发。

我也试过了:

map_object.on("drag", function() {
  console.log('Dragging...');
});

这也无济于事。

任何关于如何在 OL3 中处理地图控制事件的帮助将不胜感激(尤其是缩放!)。请注意,我已经为 on 方法的类型字段尝试了“缩放”和“缩放”。

【问题讨论】:

    标签: javascript openlayers-3


    【解决方案1】:

    除此之外,您可以检查“propertychange”可用事件的变体,据我所见,没有明确的.on ('zoom', ...),但您可以访问“分辨率”和前面 cmets 中提到的其他属性:

    map.getView().on('propertychange', function(e) {
       switch (e.key) {
          case 'resolution':
            console.log(e.oldValue);
            break;
       }
    });
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 不幸的是,这并不能解决处理缩放事件的问题。我需要知道何时且仅何时发生缩放(也不是平移或旋转)以及缩放的方向。但是,我找到了一个解决方案,我将很快发布它,它不涉及“不稳定”事件并且可以完美运行。不过还是谢谢。
      • map.getView().on('change:resolution') 能满足您的需求吗?
      • 它可以工作,但change:resolution 事件是最小的方式吗?谁能证实这一点?
      【解决方案3】:

      作为toniomentioned,监听缩放变化的方式,在openlayers术语中称为分辨率变化,是用

      map.getView().on('change:resolution', (event) => {
          console.log(event);
      });
      

      我发现这比收听一般的propertychange 并手动验证更改是否涉及解决方案更好(更简洁,更少笨拙)。

      这在使用鼠标按钮时会快速触发,因此在启动任何等待它更改的计算之前限制它可能是个好主意。

      Documentation for View

      【讨论】:

        【解决方案4】:

        您可以管理 moveend 事件...

        我们需要一个全局变量来分配地图的视图缩放级别。我有 将其命名为 currentZoomLevel。

        有一个 moveend 事件可用。让我们使用它,并添加缩放级别 检查功能..

        如果有新的缩放级别,我们会触发 zoomend 事件以 DOM 的文档。

        最后,我们需要为文档元素添加 zoomend 监听器。

        var = currentZoomLevel;
        
        map.on('moveend', checknewzoom);
        
        function checknewzoom(evt)
        {
           var newZoomLevel = map.getView().getZoom();
           if (newZoomLevel != currentZoomLevel)
           {
              currentZoomLevel = newZoomLevel;
              $(document).trigger("zoomend", zoomend_event);
           }
        }
        
        $(document).on('zoomend', function () {
           console.log("Zoom");
           //Your code here
        });
        

        Source

        【讨论】:

        • zoomend_event 替换为 evt 并将其传递给 zoomend 事件函数以在自己的代码中使用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多