2012-09-11 41 views
6

uso OpenLayers para mostrar mapas personalizados de OSM en mi sitio web.Desactivar zoom con Openlayers

Tengo algunos puntos que respetar: el mapa tiene que ser fijo (lo que significa que no podemos arrastrarlo o acercarlo).

Tengo un problema con el zoom, No puedo deshabilitar el zoom con el mouse. ¿Alguien tiene un consejo?

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

Además, si alguien tiene un consejo para eliminar todos los eventos de navegación más fácil que eso, sería muy apreciado.

Respuesta

10

desactivar los controles por defecto en su mapa pasando un array vacío:

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

Sí, más fácil! Gracias. – GeoffreyB

3

Usted puede hacer lo siguiente también:

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

Encontrado here.

Para otras opciones como desactivar el arrastre, puede echar un vistazo a documentation y personalizar el código anterior.

1

Aquí hay otra manera fácil de restringir el evento de zoom basado en cierta lógica. Debido a OpenLayers doesnt proporcionar una '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 
}; 

¿Cómo funciona esto:

Para cualquier tipo de actividad zoom, OpenLayers llamadas API en última instancia, la función llamada zoomTo. Entonces, antes de anularlo, copiamos esa función a una nueva función llamada 'zoomToProxy'. Lo reemplazamos y agregamos nuestra lógica de zoom condicional. Si queremos que el zoom para suceder simplemente lo llamamos nueva función de proxy :)

+0

¡Muchas gracias! Es una manera increíble. Gracias agan – javagc

4

enfoque de resultados Mahdi La simplificación en

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

Esta desactivación de zoom de la rueda del ratón manera no requiere de personalizar las opciones en la construcción de un mapa, por ejemplo, creando un mapa sin ningún control (aunque esto fue algo solicitado por Lght). Además, volver a habilitar el zoom funciona de manera equivalente.

Además, al buscar controles que coincidan con la propiedad habilitada zoomWheelEnabled en lugar del nombre de clase, admite controles personalizados derivados de OpenLayers.Control.Navigation.

+0

No puedo probar esto, pero parece ser otra buena manera de hacerlo en mi opinión. Aunque quería saber cómo estaban deshabilitando la rueda del mouse para acercar OpenLayers, mi objetivo era eliminar todo (el zoom era lo único que quedaba). Gracias por su respuesta, ¡espero que ayude a más personas! – GeoffreyB

+0

¡Eso funcionó perfectamente! Mucho más directo de cualquier otra solución vista hasta ahora. – user1919

+0

Y para habilitar nuevamente: 'var i, l, c = map.getControlsBy (" zoomWheelEnabled ", falso); para (i = 0, l = c.length; i igneosaur

3

Para OpenLayers3 la matriz de interacción también debe estar vacía.

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