Это происходит из-за того, что объект OpenLayers Overlay
останавливает распространение события (например, событие щелчка и перетаскивания на диаграмме)
Это можно очень легко отключить с помощью stopEvent: false
;
overlay = new ol.Overlay({
element: container,
stopEvent: false,
autoPan: true,
autoPanMargin: 20,
autoPanAnimation: {
duration: 50
}
});
Подробнее о OpenLayers Overlay
Проблема с этим заключается в том, что одно и то же событие щелчка и перетаскивания будет распространено на заднюю карту, и выбор диаграммы будет невозможен.делать.Пример этой проблемы можно увидеть на этой скрипке .Также есть билет на Github относительно этой конкретной проблемы.
Чтобы решить эту проблему, я использовал очень простую идею - отслеживать, когда курсор находится на оверлее, иотключить события карты в это время;
var mouseOver = false;
function createOverlay(width) {
container = document.getElementById('popup');
container.style.width = width;
container.onmouseover = function() {
mouseOver = true; // when cursor is targeting overlay we enable this boolean
};
container.onmouseout = function() {
mouseOver = false; // and disable when out
};
...
}
Затем использовать это boolean
, как указано ниже;
map.on("pointerdrag", function(e) {
if (mouseOver) {
e.stopPropagation();
return;
}
});
, чтобы отключить событие перетаскивания, и;
map.on("click", function(e) {
if (mouseOver) {
return;
}
// rest of chart creation logic here
}
чтобы отключить новое событие создания оверлея.
Конечную отлично работающую скрипку можно найти здесь
Pirooz bashi buddy