javascript - 如果没有可见图层,则忽略 OpenLayers 缩放滚动事件

标签 javascript openlayers

我注意到,如果所有 OpenLayers.Layers 的可见性设置为 false,我将无法再使用鼠标滚轮进行放大和缩小。我仍然可以使用 OpenLayers.Control.Zoom 按钮,但不再使用鼠标滚轮。

有办法禁用这个“功能”吗?

编辑:

这是一个 jsfiddle 链接。将图层设置为不可见,然后滚动,然后将其设置回可见。它没有改变。现在将其设置为不可见,使用缩放控制按钮,然后将其设置回可见。

http://jsfiddle.net/a8kK4/56/

这里有一些关于如何实例化 map 的代码,因为如果没有它,我将无法发布 jsfiddle:

var map = new OpenLayers.Map({
        div: "map",
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326"),
        layers: [ new OpenLayers.Layer.OSM() ]
    });

最佳答案

问题与 MouseWheel 处理程序的 onWheelEvent 有关,请参阅代码 here on github 。问题出现在行

if (!overScrollableDiv && overMapDiv) {
    if (allowScroll) {

与隐藏 map 一样,您永远不会得到它,因此满足所有这些条件,因此对实际上进行放大/缩小的 this.wheelZoom(e) 的调用永远不会被调用。因此,您所看到的行为是设计使然。

解决此问题的一种比较粗略的方法是覆盖整个函数,并将allowScroll 初始化为 true 的行设置为 true,即在主 OpenLayers.js 下载后将整个函数放入代码中,只需更改这一行

  OpenLayers.Handler.MouseWheel.prototype.onWheelEvent= function(e){        

    if (!this.map || !this.checkModifiers(e)) {
        return;
    }

    var overScrollableDiv = false;
    //CHANGE THIS LINE TO TRUE
    var allowScroll = true;
    var overMapDiv = false;

   //rest of function .......
   };

这样做的问题是,如果您在任何地方使用鼠标滚轮,现在都会发生滚动。可能有一种更优雅的方法,可以更改 overMapDiv 、allowScroll 和 overScrollableDiv 的值设置条件。我无法让它在 jsFiddle 上工作(我认为是由于版本冲突),但在本地它按预期工作。我希望这会有所帮助。

关于javascript - 如果没有可见图层,则忽略 OpenLayers 缩放滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836895/

相关文章:

javascript - 范围变量在向用户弹出后更新,但不在某个位置

javascript - 将文本添加到 openlayers map 的最简单示例?

reactjs - Openlayers GeoJSON 位于错误的位置

javascript - 在 Openlayers 3 中使用 map 进行标记缩放/旋转

javascript - 从左向右滑动而不是淡化 safari css 问题

JavaScript 检索表字段到模态窗口进行编辑?

javascript - 如何在ajax调用后为select分配选项值

javascript - 等待 JavaScript 中的获取结果

java - 以接口(interface)作为参数的函数

OpenLayers - 更新类调用的初始化方法