依照用户的国产化需求,我们在现有的国产化机器上部署了之前就已经完成的系统。测试发现所有页面的地图拖拽和双击功能不能正常使用。
解决思路:首先写个简单的demo,只有点击事件。测试结果:依旧无效。问题初步定位,跟ol源代码有关系。进一步分析,拖拽和双击无效 ,说明和点击事件有关。查阅原代码(过程省略,因为找了太久我才发现是这里),点击事件相关内容:
ol.interaction.Pointer.prototype.updateTrackedPointers_ = function(mapBrowserEvent) {
if (this.isPointerDraggingEvent_(mapBrowserEvent)) {
var event = mapBrowserEvent.pointerEvent;
if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
delete this.trackedPointers_[event.pointerId];
} else if (mapBrowserEvent.type ==
ol.MapBrowserEvent.EventType.POINTERDOWN) {
this.trackedPointers_[event.pointerId] = event;
} else if (event.pointerId in this.trackedPointers_) {
// update only when there was a pointerdown event for this pointer
this.trackedPointers_[event.pointerId] = event;
}
this.targetPointers = ol.object.getValues(this.trackedPointers_);
}
};
调试发现这里三个if ,我的event一个也不喜欢。所以问题位置找到了,把event强行加给trackedPointers_问题就解决啦。
ol.interaction.Pointer.prototype.updateTrackedPointers_ = function(mapBrowserEvent) {
if (this.isPointerDraggingEvent_(mapBrowserEvent)) {
var event = mapBrowserEvent.pointerEvent;
if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
delete this.trackedPointers_[event.pointerId];
} else if (mapBrowserEvent.type ==
ol.MapBrowserEvent.EventType.POINTERDOWN) {
this.trackedPointers_[event.pointerId] = event;
} else if (event.pointerId in this.trackedPointers_) {
// update only when there was a pointerdown event for this pointer
this.trackedPointers_[event.pointerId] = event;
}else{
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓兼容华为银河麒麟桌面系统浏览器地图无法拖拽问题↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
this.trackedPointers_["1"] = event;
}
this.targetPointers = ol.object.getValues(this.trackedPointers_);
}
困扰我这么久的问题居然一句话就能搞定~~