2012-09-11 15 views
6

Ich benutze OpenLayers, um benutzerdefinierte OSM-Karten auf meiner Website anzuzeigen.Zoom mit Openlayers deaktivieren

Ich habe ein paar Punkte zu respektieren: die Karte muss fest sein (was bedeutet, dass wir es nicht ziehen oder zoomen können).

Ich habe ein Problem mit dem Zoom, ich kann nicht schaffen, Zoom mit der Maus zu deaktivieren. Hat jemand einen Tipp?

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); 

Auch wenn jemand einen Tipp hat, alle Navigationsereignisse einfacher als das zu entfernen, würde es sehr geschätzt werden.

Antwort

10

Deaktivieren Sie die Standard-Steuerelemente auf der Karte durch ein leeres Array übergeben:

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

Ja, einfacher! Vielen Dank. – GeoffreyB

3

Sie auch folgende Möglichkeiten:

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 gefunden.

Für andere Optionen wie deaktivieren ziehen, können Sie einen Blick auf die documentation werfen und den obigen Code anpassen.

1

Hier ist eine weitere einfache Möglichkeit, das Zoom-Ereignis basierend auf einer Logik zu beschränken. Da Openlayers liefern tut eine ‚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 
}; 

Wie das funktioniert:

Für jede Art von Zoom-Aktivität, Openlayers-API-Aufrufe letztlich die Funktion aufgerufen zoomTo. Bevor wir es überschreiben, kopieren wir diese Funktion in eine neue Funktion namens 'ZoomToProxy'. Wir überschreiben es und fügen unsere bedingte Zoom-Logik hinzu. Wenn wir die Zoom passieren wollen wir rufen Sie einfach neue Proxy-Funktion :)

+0

Vielen Dank !!! Es ist ein erstaunlicher Weg. Danke, agan – javagc

4

Vereinfachen Ansatz von Mahdi Ergebnisse in

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

Auf diese Weise Zoom Mausrad deaktivieren erfordert keine Optionen anpassen Karte auf den Bau z.B. durch Erstellen einer Karte ohne Kontrolle (obwohl dies von Lght etwas gewünscht wurde). Außerdem funktioniert das erneute Aktivieren des Zooms gleichwertig.

Durch die Suche nach Steuerelementen, die der aktivierten Eigenschaft zoomWheelEnabled anstelle des Klassennamens entsprechen, werden benutzerdefinierte Steuerelemente unterstützt, die von OpenLayers.Control.Navigation abgeleitet sind.

+0

Ich kann das nicht testen, aber es scheint meiner Meinung nach ein anderer guter Weg zu sein. Obwohl ich wissen wollte, wie ihr das OpenLayers-Mausrad zoomen wollt, war mein Ziel, alles zu entfernen (der Zoom war das Einzige, was übrig blieb). Danke für die Antwort, ich hoffe, es wird mehr Menschen helfen! – GeoffreyB

+0

Das hat perfekt funktioniert! Viel einfacher von jeder anderen Lösung, die bisher gesehen wurde. – user1919

+0

Und wieder aktivieren: 'var i, l, c = map.getControlsBy (" zoomWheelEnabled ", false); für (i = 0, l = c.length; i igneosaur

3

Für OpenLayers3 muss das Interaktionsarray auch leer sein.

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