我注意到,如果所有 OpenLayers.Layers 的可见性设置为 false,我将无法再使用鼠标滚轮进行放大和缩小。我仍然可以使用 OpenLayers.Control.Zoom 按钮,但不再使用鼠标滚轮。
有办法禁用这个“功能”吗?
编辑:
这是一个 jsfiddle 链接。将图层设置为不可见,然后滚动,然后将其设置回可见。它没有改变。现在将其设置为不可见,使用缩放控制按钮,然后将其设置回可见。
这里有一些关于如何实例化 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/