Почему openlayers не обнаруживает сенсорные события с моего ноутбука?

Я разрабатываю приложение, используя OpenLayers 6.2.1. Чтобы оптимизировать его для мобильных устройств, я пытаюсь увеличить hitTolerance, когда пользователь касается экрана. Согласно документации, карта должна обнаруживать " touchOnly». Однако, когда я выполняю сенсорные взаимодействия на своем ноутбуке с сенсорным экраном, это событие не обнаруживается моей функцией, которая реагирует на сенсорные события:

map.on('touchOnly', function() {
    hitTolerance = 5;
    console.log('touch')
});

Вместо этого эти сенсорные события запускают мою функцию щелчка. У mouseOnly похожая проблема, когда события, запущенные моей мышью, обнаруживаются как события щелчка, а не события mouseOnly. Есть ли обходной путь, который я могу реализовать?

Быстрое редактирование. Я использую Google Chrome и также не могу регистрировать сенсорные события, используя следующее:

map.addEventListener("touchstart", function () {
    hitTolerance = 5;
    console.log('touch');
});

person Devin Simmons    schedule 03.03.2020    source источник
comment
Вы включили ol.css из версии, которую используете?   -  person geocodezip    schedule 03.03.2020
comment
Да, я включил ol.css   -  person Devin Simmons    schedule 03.03.2020


Ответы (2)


ol/Map не запускает touchOnly Используйте вместо этого singleclick или другую карту событий, например movestart, см. https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html
Он одновременно обрабатывает события мыши и касания.

person Viglino Jean-Marc    schedule 04.03.2020
comment
Правильный. touchOnly — это условие, а не тип события. - person ahocevar; 05.03.2020

Я нашел подходящий обходной путь.

Ранее в моем коде я объявил карту var как таковую:

var map = new ol.Map({
    target: 'map', 
    view: new ol.View({
        center: [-9099568, 4192168],
        zoom: 3,
        projection: 'EPSG:3857',
    })
});

Целевая «карта» относится к этой части моего HTML:

<body>
    <div id="map" class="map"></div>
</body>

Итак, я смог обнаружить сенсорные события на карте с помощью этой строки:

document.getElementById('map').addEventListener('touchstart', function () {
    console.log('touch');
});

По какой-то причине объект старой карты не может обнаружить касание, но его контейнер может.

person Devin Simmons    schedule 03.03.2020