我似乎无法为触摸事件添加事件侦听器。只有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
        },


这会导致错误-“未捕获的TypeError:无法读取未定义的属性'register'”

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


所以现在我完全迷路了!

最佳答案

那正是应该发生的事情!

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")
});

09-25 16:57