Клуб API Карт

Отключать перетаскивание карты, при mousedown на geoObject

Пост в архиве.

Сам программист, программирую много на чем, но представляете не могу решить эту проблему!?

В общем задача такая, есть на карте geoObject'ы (dragging = false), при событии mousedown, на странице создаю копию этого объекта (не на карте), чтобы можно было переместить его и дропнуть в корзину, с этим все впорядке, проблема в том, что карта продолжает тянуться за мышкой, что только не делал, не получается и все..

 

Что уже делал:

geoObject.events.add('mousedown', function(e){

e.preventDefault();

});

не помогает, также и stopPropagation() и stopImmediatePropagation(), что угодно "stop" без толку (

 

geoObject.events.add('mousedown', function(e){

map.behaviors.disable('drag');

});

Фигу, срабатывает только тогда, когда мышку отпускаем.

 

map.events.add('actiontick', function(e){

e.preventDefault();

});

такая же история.

 

Из серии "костыль, мож сработает O_o":

 

map.events.add('actiontick', function(e){

map.event.fire('actionend');

});

 

Что-то уже неплохо, карта не таскается, но geoObject'ы все равно ездят, потому что на отдельном слое похоже.

 

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

Такое ощущение что Вы просто наугад пробуете.

События с геообъектов пропагируются на родителей (коллекции которые их содержат)

Карта ловит mousedown раньше геообъекта и это нельзя запревентить из обработчика геообъекта, только на самой карте.

 

        map.events.add('mousedown', function (e) {              e.preventDefault();        });

 

Все это легко выяснить, если подписавшись на всё, просто смотреть очередность вызова обработчиков.

Может быть Вам стоит наоборот, все метки сделать draggable:true, а как раз дубликат оставлять на месте?

 

в том то и проблема, что когда ставлю draggable: true,

и такой обработчик события

 

geoObject.events.add('mousedown', function(e){
              
               e.preventDefault();

}

 

то GeoObject все равно "таскается"

Надо наверное слушать и преветить beforedragstart

Вообще не очень понятно как именно оно должно работать, и лучше прикладывать ссылку на карту

Нашел решение, по-моему оно конечно не айс но по крайней мере работает.

 

var isGeoObjectOvered = false;

geoObject.events.add('mouseenter',function(e){

    isGeoObjectOvered = true;
});

 

geoObject.events.add('mouseleave',function(e){

    isGeoObjectOvered = false;
});

 

map.events.add('mousedown', function (e) {
   if (isGeoObjectOvered )
   {
      e.preventDefault();
   }

});