Выберите взаимодействие stopDown

Я ищу способ заставить функцию "stopDown" PointerInteraction/DrawInteraction работать для взаимодействия Select. У меня есть прикрепленный прослушиватель кликов на карте, который не должен срабатывать, когда на карту добавляется взаимодействие выбора.

Я пытался остановить распространение событий при нажатии / указателе вниз / указателе вверх, но, похоже, это останавливает работу любого панорамирования карты.

Как выполнить «stopDown» для взаимодействия «Выбрать»?


person Stsje    schedule 29.11.2018    source источник


Ответы (1)


Я использую обходной путь с помощью переменной mouseOver (установленной либо взаимодействием pointMove, либо событием карты), чтобы определить, находится ли мышь над функцией, а затем протестировать ее в событиях щелчка карты.

e.g.

var mouseOver;

map.on('pointermove', function(evt) {
     mouseOver = (map.getFeaturesAtPixel(evt.pixel).length > 0);
});

map.on('singleclick', function(evt) {

    if (mouseOver()) { return; }

    .....
    .....
    .....
    .....

});

В более сложных случаях вам нужно будет добавить/удалить взаимодействие выбора pointerMove для каждого взаимодействия выбора щелчка, которое вы добавляете/удаляете, которое ничего не делает, кроме установки mouseOver

var interHover = new ol.interaction.Select({
    condition: ol.events.condition.pointerMove,
    style: function(feature) {
        // return the unselected style
    },
    filter: // same as click select interaction
});

interHover.on( "select", function(evt) { mouseOver = (evt.selected.length > 0); });
person Mike    schedule 29.11.2018
comment
В моем случае это не сработает, так как я добавляю и удаляю взаимодействие выбора (оно не всегда добавляется на карту). Поэтому, когда взаимодействие выбора не активно, пользователь должен иметь возможность щелкнуть карту, как и раньше, я не могу просто проверить наличие каких-либо объектов по координате. - person Stsje; 29.11.2018