我似乎无法为触摸事件添加事件侦听器。只有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是否有其他事件(pointermove
,pointerdrag
)。在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")
});