2013-05-27 186 views
2

我爲移動瀏覽器使用建立了地圖,因此我需要爲每個標記點擊和點按/觸摸事件。我嘗試添加一個點擊事件,然後添加一個觸摸事件,但它只適用於其中一個。OpenLayers:如何在標記上添加點擊和觸摸事件

marker.events.register('click', marker, function(evt) { 
    $('#info').html(
     '<p>' + data[i].title + '<br />' + data[i].addr + '</p>' 
    ); 
}); 
//marker.events.register('touchstart', marker, function(evt) { 
// $('#info').html(
//  '<p>' + data[i].title + '<br />' + data[i].addr + '</p>' 
// ); 
//}); 

回答

1

上有openlayers.org網站爲例 - Click Handler Example

您可以創建extentes OpenLayers.Control一個定製控件類,並在類中創建一個函數,使用OpenLayers.Handler.Click來聽點擊事件。

Handler.Click實際上會同時收聽點擊事件和觸摸事件。

OpenLayers.Control.ListenToClick = OpenLayers.Class(OpenLayers.Control, { 
    defaultHandlerOptions: { 
     'single': true, 
     'pixelTolerance': 0, 
     'stopSingle': 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.onClick, 
      }, this.handlerOptions 
     ); 
    }, 

    onClick: function(evt) { 
     $('#info').html(
      '<p>' + data[i].title + '<br />' + data[i].addr + '</p>' 
     ); 
    }, 
}); 

創建並添加地圖,當你需要它

var ctmControl = new OpenLayers.Control.ListenToClick({ 
    handlerOptions: { 
     'single': true, 
     'pixelTolerance': 0, 
     'stopSingle': false 
    } 
}); 
map.addControl(ctmControl); 

如果不是enuough你敏感的,你可以試試這個

'pixelTolerance': 10, 

最後但並非最不重要的,記得激活它

ctmControl.activate(); 

當然,您可以用相同的方式停用它。

ctmControl.deactivate(); 
相關問題