2012-09-11 247 views
6

我使用OpenLayers在我的网站上显示自定义OSM地图。使用Openlayers禁用缩放

我有几点要尊重:地图必须是固定的(也就是说,我们不能将其拖动或缩小它)。

我有一个缩放问题,我无法设法禁用鼠标放大。有没有人有小费?

map = new OpenLayers.Map('map'); 
map.events.remove("move"); 
map.events.remove("movestart"); 
map.events.remove("moveend"); 
map.events.remove("zoomend"); 
map.events.remove("mouseover"); 
map.events.remove("mouseout"); 
map.events.remove("mousemove"); 
map.events.remove("zoomstart"); 
var nav = new OpenLayers.Control.Navigation({ 
    defaultDblClick: function(event) { return ; } 
}); 
map[index].addControl(nav); 

此外,如果有人提示删除所有导航事件比这更容易,它将不胜感激。

回答

10

通过传递一个空数组禁用你的地图上的默认控件:

var map = new OpenLayers.Map('map', { controls: [] }); 
+0

呀,更轻松!谢谢。 – GeoffreyB

3

你可以做下面还有:

map = new OpenLayers.Map({ 
    // options here ... 
} 

var Navigation = new OpenLayers.Control.Navigation({ 
    'zoomWheelEnabled': false, 
    'defaultDblClick': function (event) { 
     return; 
    } 
}); 

map.addControl(Navigation); 

var NavigationControls = map.getControlsByClass('OpenLayers.Control.Navigation') 
    , i; 

for (i = 0; i < NavigationControls.length; i++) { 
    NavigationControls[i].disableZoomWheel(); 
} 

找到here

对于像禁止拖动其他选项,你可以去看看documentation和定制上面的代码。

1

这里是另一种基于某种逻辑限制缩放事件的简单方法。由于的OpenLayers犯规提供 'beforezoom'

map.zoomToProxy = map.zoomTo; 
map.zoomTo = function (zoom,xy){ 
// if you want zoom to go through call 
map.zoomToProxy(zoom,xy); 
//else do nothing and map wont zoom 
}; 

这是如何工作:

任何一种缩放活动的,API的OpenLayers最终调用称为zoomTo功能。因此,在覆盖它之前,我们将该函数复制到一个名为“zoomToProxy”的新函数中。我们覆盖它并添加我们的条件缩放逻辑。如果我们想缩放发生我们只需要调用新的代理功能:)

+0

非常感谢!这是令人惊叹的方式。谢谢阿甘 – javagc

4

简化马赫迪结果的做法,

var i, l, c = map.getControlsBy("zoomWheelEnabled", true); 
for (i = 0, l = c.length; i < l; i++) { 
    c[i].disableZoomWheel(); 
} 

这样的鼠标滚轮变焦禁用不需要以自定义在例如构建地图选项通过创建没有任何控制的地图(虽然这是Lght要求)。另外重新启用缩放工作等效。

此外,通过搜索控件匹配启用属性zoomWheelEnabled而不是类名,它支持从OpenLayers.Control.Navigation派生的自定义控件。

+0

我无法测试这个,但在我看来这似乎是另一个好方法。即使我想知道你们是如何禁用鼠标滚轮放大OpenLayers,我的目标是删除所有东西(缩放是唯一剩下的东西)。谢谢你的回答,我希望它能帮助更多的人! – GeoffreyB

+0

完美的工作!从迄今为止看到的任何其他解决方案更直接。 – user1919

+0

并重新启用: 'var i,l,c = map.getControlsBy(“zoomWheelEnabled”,false); 为(I = 0,L = c.length;我 igneosaur

3

对于OpenLayers3相互作用阵列也需要是空的。

var map = new ol.Map({ 
    controls: [], 
    interactions: [] 
});