поведение mapbox start stop вместо onload

#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, я посмотрю на него, в противном случае извините, но в этом формате вам практически невозможно помочь. Удачи