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

时间:2014-05-23 19:14:53

标签: javascript openlayers

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

无论如何都要禁用此功能'?

编辑:

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

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

这里有一些关于如何实例化地图的代码,因为SO不会让我发布没有它的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() ]
    });

1 个答案:

答案 0 :(得分:1)

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

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

与隐藏的地图一样,你永远不会得到它以便满足所有这些条件,因此实际上放大/缩小的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上工作(我认为由于版本冲突),但在本地它按预期工作。我希望这会有所帮助。