我注意到如果所有OpenLayers.Layers的可见性设置为false,我就无法再使用鼠标滚轮放大和缩小。我仍然可以使用OpenLayers.Control.Zoom按钮,但不再使用鼠标滚轮。
无论如何都要禁用此功能'?
编辑:
这是一个jsfiddle链接。将图层设置为不可见,然后滚动,然后将其设置为可见。它没有改变。现在将其设置为不可见,使用缩放控制按钮,然后将其设置为可见。
这里有一些关于如何实例化地图的代码,因为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() ]
});
答案 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上工作(我认为由于版本冲突),但在本地它按预期工作。我希望这会有所帮助。