9

我正在使用 OpenLayers 在我的网站上显示自定义 OSM 地图。

我有几点要尊重:地图必须修复(这意味着我们不能拖动或缩放它)。

我的缩放有问题,我无法用鼠标禁用缩放。有人有小费吗?

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

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

4

6 回答 6

16

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

var map = new OpenLayers.Map('map', { controls: [] });
于 2012-09-11T09:37:09.237 回答
10

对于 OpenLayers3,交互数组也需要为空。

var map = new ol.Map({
  controls: [],
  interactions: []
});
于 2015-02-13T13:35:13.103 回答
8

Mahdi 的简化方法导致

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.

于 2014-07-03T22:50:48.253 回答
4

您还可以执行以下操作:

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

在这里找到。

对于禁用拖动等其他选项,您可以查看文档并自定义上述代码。

于 2013-06-20T11:39:58.327 回答
3

这是基于某些逻辑来限制缩放事件的另一种简单方法。因为 OpenLayers 不提供“缩放前”

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

这是如何工作的:

对于任何类型的缩放活动,OpenLayers API 最终都会调用名为 zoomTo 的函数。所以在覆盖它之前,我们将该函数复制到一个名为“zoomToProxy”的新函数中。我们覆盖它并添加我们的条件缩放逻辑。如果我们想要进行缩放,我们只需调用新的代理函数 :)

于 2013-06-26T16:30:14.047 回答
0

您可以重置控件数组,然后将 Zoom 和 TouchNavigation 添加到其中。

var map_controls = [];
map_controls.push( new OpenLayers.Control.Zoom() );
map_controls.push( new OpenLayers.Control.TouchNavigation() );
var map = new OpenLayers.Map({
  div: "map",
  controls: map_controls
});

希望能帮助到你 !:)

于 2019-05-28T07:59:17.710 回答