2016-06-12 4 views
0

Ich versuche doppelten Mausklick Ereignis auf OpenStreetMap zu handhaben, mit dem folgenden Code:Ionic: Maus-Ereignis in Openlayers nicht behandelt wurde

var map = new OpenLayers.Map("basicMap"); 

var mapnik = new OpenLayers.Layer.OSM(); 

var fromProjection = new OpenLayers.Projection("EPSG:4326"); 

// Transform from WGS 1984 
var toProjection = new OpenLayers.Projection("EPSG:900913"); 

// to Spherical Mercator Projection 
var position = new OpenLayers.LonLat(13.41,52.52).transform(fromProjection, toProjection); 

var zoom = 15; 

map.addLayer(mapnik); 
map.setCenter(position, zoom); 

var markers = new OpenLayers.Layer.Markers("Markers"); 

map.addLayer(markers); 

OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, 
{ 
    defaultHandlerOptions: 
    { 
     'single': true, 
     'double': true, 
     '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(e) 
    { 
     var lonlat = map.getLonLatFromViewPortPx(e.xy); 

     alert("clicked"); 

     alert("Lat, Lon : " + lonlat.lat + ", " + lonlat.lng); 

     markers.addMarker(new OpenLayers.Marker(lonlat)); 
    }, 

    touchstart: function(e) 
    { 
     console.log(); 
    }, 

    touchend: function(e) 
    { 
     console.log(); 
    }, 

    handleSingle: function(e) 
    { 
     console.log(); 
    } 
}); 

var control = new OpenLayers.Control.Click(); 
map.addControl(control); 
control.activate(); 

Doch nach ein paar Tests zu tun. Die Nachricht "geklickt" wurde nie angezeigt, obwohl ich keinen Fehler auf der Konsole gefunden habe, während die Karte korrekt angezeigt wurde.

Also ist irgendetwas falsch in dem oben genannten Code? Wie ist es möglich, dieses Problem zu beheben?

Hinweis: Ich verwende Ionic Framework.

Jede Hilfe wird sehr geschätzt.

Vielen Dank.

Antwort

2

OpenLayers.Map löst kein Klickereignis aus.

Sie sollten eine "Click" -Steuerung (fehlt in Openlayers 2), wie folgt (von http://dev.openlayers.org/examples/click.html)

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(e) { 
     var lonlat = map.getLonLatFromPixel(e.xy); 
     alert("You clicked near " + lonlat.lat + " N, " + 
            + lonlat.lon + " E"); 
    } 
}); 

Implementieren Sie die Trigger-Funktion definieren, indem Sie Ihre Logik darin setzen, oder ein Click-Ereignis zu feuern. Dann nutzen Sie die Kontrolle in Ihrem Code

var control = new OpenLayers.Control.Click(); 
map.addControl(control); 
control.activate(); 

Sie die Click-Handler-Optionen finden Sie hier http://dev.openlayers.org/apidocs/files/OpenLayers/Handler/Click-js.html

Zum Beispiel, wenn Sie doppelt anklickt behandeln müssen, sollten Sie die doppelte Eigenschaft auf true ändern.

+0

Vielen Dank für Ihre Hilfe. Ich habe den Code ausprobiert, den Sie vorgeschlagen haben, aber ich habe immer noch das gleiche Problem. Bitte sehen Sie sich meinen aktualisierten Code in der obigen Frage an. – Kais

+0

Hier ist eine Geige mit Ihrem Code https://jsfiddle.net/fradal/0bfwvcyz/. Es scheint zu funktionieren wie erwartet ... – fradal83

+0

Ja, das funktioniert. Aber es funktioniert nicht mit meiner Ionic/Cordova App. Das ist seltsam. – Kais

Verwandte Themen