2012-09-11 249 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: [] 
});