Клуб API Карт

не срабатывает событиe mouseup при рисовании ломаной

Николай Орленко
21 марта 2015, 14:34

Здравствуйте. Мне надо сделать рисование ломаной по событиям перемещения курсора с нажатой левой клавишей. Есть кусок кода :

 

var myMap;

ymaps.ready(function(){

  myMap = new ymaps.Map("map", {

      center: [55.930283, 37.850856],

      zoom: 10,

      controls: ['zoomControl',  'fullscreenControl']

  },{

    balloonMaxWidth: 200

  });

  myMap.behaviors.disable('drag');

  var isDrawing = false;

 

  firstButton = new ymaps.control.Button("Обвести");

  myMap.controls.add(firstButton, {float: 'right'});

  myMap.options.set('dragCursor', 'pointer');

 

  var polyline = new ymaps.Polyline([], {}, {

    strokeColor: '#ff0000',

    strokeWidth: 2 // ширина линии

  });

 

  myMap.geoObjects.add(polyline);

 

  myMap.events.add("mousedown", function(e){

    e.preventDefault();

    console.log("MOUSEDOWN");

    isDrawing = true;

  })

 

  myMap.events.add("mouseup", function(e){

    console.log("MOUSEUP");

    isDrawing = false;

  })

 

  myMap.events.add("mousemove", function(e){

 

    if(isDrawing) {

      console.log("IS DRAWING");

      polyline.geometry.insert(polyline.geometry.getLength(), e.get('coords'));

    }else{

      console.log("STOP DRAWING");

    }

  })

 

  myMap.events.add("actionbegin", function(e){

 

    console.log("ACTIONBEGIN");

 

  })

 

  myMap.events.add("actionend", function(e){

 

    console.log("ACTIONEND");

 

  })

}); 

 

 

если закомментировать polyline.insert.... то событие mouseup срабатывает!

В чем может быть загвоздка ?

 

Да, кстати не срабатывает как на трекладе, так и на обычной мышке

2 комментария

Происходит примерно следующее:

в момент когда вы отпускаете кнопку мышки, под курсором появляется геообъект. Геообъекты имеют по умолчанию модель интерактивности "default#geoObject", которая не прокидывает на карту некоторые типы событий.

Чтобы исправить данное поведение надо установить ломаной опцию  interactivityModel: 'default#transparent'

 

PS: добавлять точку на каждый mousemove не очень хорошая идея – в ломаной будет очень много точек. Оптимально обернуть добавление точки в декоратор типа trottle

Николай Орленко
21 марта 2015, 16:54

спасибо! Буду знать!