OpenLayers 3.6.0 TouchEvents

时间:2015-07-28 19:43:32

标签: javascript openlayers-3

我似乎无法为触摸事件添加事件侦听器。只有moveend被解雇了。

map.on('zoomend', mapEvent);
map.on('moveend', mapEvent);
map.on('touchmove', mapEvent);
map.on('touchstart', mapEvent);

这些都不起作用

map = new ol.Map({
        eventListeners: {

            "zoomend": mapEvent,
            "changelayer": mapEvent,
            "changebaselayer": mapEvent,
            "mousedown": mapEvent,
            "touchmove": mapEvent
        },

这会导致错误 - " Uncaught TypeError:无法读取属性'注册'未定义"

 map.events.register('touchmove', map, function(e) {
        console.log("touchmove")
     });
     map.events.register('touchend', map, function(e) {
         console.log("touchend")
     });

所以现在我完全迷失了??

1 个答案:

答案 0 :(得分:3)

这正是应该发生的事情!

除了moveend之外,您列出的所有这些事件在OpenLayers 3.6.0上都不存在。此外,eventListeners下的配置选项 ol.Map 不存在。 您可以在official API docs上查看ol.Map的所有活动和配置选项。这些事件列在 Fires 部分。

此外,请检查此JSFiddle以查看其他一些事件(pointermovepointerdrag)。在Chrome上,您还可以使用开发人员工具(F12)模拟触控设备,看看会发生什么。

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    })
  ],
  controls: ol.control.defaults({
    attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
      collapsible: false
    })
  }),
  target: 'map',
  view: new ol.View({
    center: [0, 0],
    zoom: 2
  })
});


map.on('moveend', function(e) {
    console.log("moveend")
});
map.on('pointermove', function(e) {
    console.log("pointermove")
});
map.on('pointerdrag', function(e) {
    console.log("pointerdrag")
});