OpenLayers6 Определить, когда курсор покидает карту - PullRequest
0 голосов
/ 09 января 2020

Я хочу скрыть окружность, прикрепленную к курсору, когда курсор покидает карту. Этот круг должен также скрываться, когда курсор вводит ol.control. В более старых версиях OL я просто добавлял слушатель mouseleave к объекту canvas, но в OL6 не гарантируется, что холст существует, и распространение этих основных событий c кажется остановленным для всех элементов ниже * 1006. *.

Как мне добиться такого поведения в OL6?

1 Ответ

0 голосов
/ 09 января 2020

Вам понадобятся отдельные слушатели для управления. Мой код для контекстного меню (не активен на элементах управления) выглядит как

var controlOver = false;

function setControlOver(element) {
    element.addEventListener('mouseover', function() { controlOver = true; });
    element.addEventListener('mouseout', function() { controlOver = false; });
}

setTimeout(function() {
    var controls = map.getViewport().getElementsByClassName('ol-control');
    for (var i=0; i<controls.length; i++) {
        setControlOver(controls[i]);
    }
    map.getControls().on('add', function(e) {
        // ????? setControlOver(e.element.getElement());
    });
}, 250);

map.getOverlays().on('add', function(e) {
    setControlOver(e.element.getElement());
});

var canvas = map.getViewport().getElementsByClassName('ol-overlaycontainer-stopevent')[0];

canvas.addEventListener('contextmenu', function (e) {
    if (!controlOver) {
        e.preventDefault();
        openContextMenu(e.x, e.y);
    }
});
...