#javascript #mapbox
#javascript #mapbox
Вопрос:
В Mapbox есть множество примеров, когда функции загружаются в начале, а затем доступны навсегда. Т.е. Пример измерения:
https://docs.mapbox.com/mapbox-gl-js/example/measure /.
В примерах кодов обычно используется
map.on('load', function () {
Эта постоянная доступность — это не то, что мне нужно. Я создаю приложение, в котором такие функции должны запускаться кнопкой и останавливаться второй кнопкой, подобной этой:
<div class='button' onclick='startMeasuring();'>Start measuring</div>
<div class='button' onclick='stopMeasuring();'>Stop measuring</div>
Как мне изменить код в примере mapbox для достижения этой цели?
Предпочтительно я хотел бы создать класс «MyTools», в котором startMeasuring() и все остальные функции являются просто методами.
Добавлена новая основная проблема — параллельный запуск onclicks:
map.on('click', function (e) {
[.. do task 1 ..]
}
map.on('click', function (e) {
[.. do task 2 ..]
}
map.on('click', function (e) {
[.. do task 3 ..]
}
Теперь, как я могу остановить выборочный щелчок, выполняющий задачу 2?
Комментарии:
1. Проверьте этот пример … он включает в себя кнопку запуска / паузы, рисующую линию. Преобразование этого в классы — это деталь реализации разработчика, конечно, вы можете с этим справиться
2. Не очень полезно, потому что приостановка приводит к возобновлению рисования в остановленном положении. Я нацелен на полный сброс функции со сбросом / переопределением всех начальных параметров.
3. Мне непонятно, в чем суть, на которой вы застряли… какой код вы реализовали до сих пор? если вы добавите минимально воспроизводимый пример, вам будет легче помочь
4. Между тем я мог бы свести свою проблему к функции остановки. При использовании нескольких примеров из mapbox вы получаете множество (анонимных?) Функций onclick, работающих параллельно. Некоторые я хочу, другие я хочу остановить. Теперь, как я могу выборочно остановить один из них? Смотрите новый код, который я добавил в приведенный выше mastertext.
5. Вам нужен только один
map.on(‘click’
, чтобы захватить все щелчки, нажатая клавиша находится в аргументах, полученных событием в качестве параметров. Я бы реализовал любую логику, которую вы пытаетесь сделать таким образом
Ответ №1:
Если вы хотите полностью отменить обработчик событий (отсоединить событие), то вам нужно использовать map.off("click"), ...
это их реализация DetachEventHandler
map.off('click', function(e) {
// this will detach the click event handling
console.log('Detached');
});
Комментарии:
1. Спасибо, пытаюсь работать с более компактными примерами: функция pickCoords() { console.log(«pickCoords():»); map.on(‘click’, функция (e) { w = JSON.stringify(например,lngLat.wrap()); … работает нормально } но все упражнения для остановки не работают: функция pickCoordsCancel() { console.log(«pickCoordsCancel():»); map.off(‘click’); //map.on(‘click’, функция (e) {}); //map.выкл(‘click’, функция (e) {}); // map.off(‘click’, onClick); // map.off(‘click’, ‘onClick’); };
2. Если вы предоставите минимально воспроизводимый пример на скрипке или codepen, я посмотрю на него, в противном случае извините, но в этом формате вам практически невозможно помочь. Удачи