javascript - ionic : mouse event within OpenLayers wasn't handled

标签 javascript angularjs cordova ionic-framework openlayers

我正在尝试使用以下代码处理 OpenStreetMaps 上的双击鼠标事件:

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

但是,经过一些测试后。虽然 map 正确显示,但我在控制台上没有发现任何错误,但从未显示“clicked”消息。

那么上面的代码有什么问题吗?如何解决这个问题?

注意:我使用的是 Ionic 框架。

任何帮助将不胜感激。

谢谢。

最佳答案

OpenLayers.Map 不会触发点击事件。

您应该定义一个“Click”控件(OpenLayers 2 中缺少),如下所示(来自 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");
    }
});

通过将逻辑放入其中或触发点击事件来实现触发器功能。 然后在代码中使用该控件

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

您可以在此处找到点击处理程序选项 http://dev.openlayers.org/apidocs/files/OpenLayers/Handler/Click-js.html

例如,如果您需要处理双击,则应将 double 属性更改为 true。

关于javascript - ionic : mouse event within OpenLayers wasn't handled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779867/

相关文章:

javascript - 更改谷歌可视化表日期格式

javascript - PHP 脚本不接受来自具有 AngularJS 脚本的客户端的 GET/POST 数据

css - Chrome的手机模拟器和iPhone模拟器有高度差吗?

android - 错误 : ENOENT: no such file or directory when running Ionic Cordova Platform Add Android

android - Ionic Android Release 构建终止 HTTPS 请求

javascript - 如何查明 window.location 何时发生变化

javascript - 延迟显示 iframe 'preview' 弹出窗口

javascript - 请求头字段不允许授权(AngularJS Rest api 请求)

javascript - 为什么以下 Angular 1.6 代码不以这种方式过滤为小写?

javascript - 通过 Angular JS 中的 ajax 调用加载模板 url