在OpenLayers 2中停止活动?

时间:2015-01-14 16:02:55

标签: javascript events openlayers

我有一张有功能的地图。我想点击功能并对'featureselected'作出反应。 我也希望能够点击地图中的其他位置。

  OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                
    defaultHandlerOptions: {
        'single': true,
        'double': false,
        'pixelTolerance': 0,
        'stopSingle': false,
        'stopDouble': false
    },
    initialize: function(options) {
        this.handlerOptions = OpenLayers.Util.extend(
            {}, this.defaultHandlerOptions
        );
        OpenLayers.Control.prototype.initialize.apply(
            this, arguments
        ); 
        this.handler = new OpenLayers.Handler.Click(
            this, {
                'click': this.trigger
            }, this.handlerOptions
        );
    }, 
    trigger: function(evt) {
        // do things
    }
  });



    var click = new OpenLayers.Control.Click();
    selectControl = new OpenLayers.Control.SelectFeature(vector);
    _map.addControl(selectControl);
    selectControl.activate();
    _map.addControl(click);
    click.activate();
    vector.events.on({
        'featureselected': onSelect,

单击该功能时,我不想调用地图的单击功能。 我必须在onSelect中调用什么来防止事件传播,冒泡? 现在,当我点击某个功能时,会调用这两个函数。 我试过OpenLayers.Event.stop(evt),发现evt.cancelBubble,找不到evt.Bubbles

非常感谢, 罗波

1 个答案:

答案 0 :(得分:0)

我有一个带有MouseOver-Control(矢量)的OpenLayers地图,带有SelectFeature(矢量),还有一个Click-Event,可以搜索GetFeatureInfo,如果找不到任何内容,则请求点击位置。

在selectControl之前添加Click-Control可能会有所帮助。

我的init-function大致如下所示:

oMouseOverCtrl = new OpenLayers.Control.SelectFeature( oMouseOverVectorArray, { ... });
oMapObj.addControl( oMouseOverCtrl );
oMouseOverCtrl.activate(); 

oMouseClickControl = new OpenLayers.Control.SelectFeature( oMouseOverVectorArray, { ... });
oMapObj.addControl( oMouseClickControl );
oMouseClickControl.activate();

oMouseClickControlInfotool = new OpenLayers.Control.WMSGetFeatureInfo({...});
oMapObj.addControl( oMouseClickControlInfotool );
oMouseClickControlInfotool.activate();