Клуб API Карт

map.disableDragging and stopPropagation

Kirill Govina
13 января 2009, 19:26

Доброго времени суток!

Возможно, кто нибудь уже сталкивался с подобной проблемой/задачей:

Необходимо создать ряд обзерверов, на события MouseMove, MouseDown, MouseUp.

Проблема в том, что метод disableDragging отключает прослышивание событий MouseMove.

Примерный код:

observer_map_mousedown = YMaps.Events.observe(map, map.Events.MouseDown, function(mEvent){
            map.disableDragging();

            //... some custome code
});


observer_map_mousemove = YMaps.Events.observe(map, map.Events.MouseMove, function (mEvent) {

          //...some custom code, that need mouse move actions

});


Есть ли возможность как то использовать, что то вроде подобного кода:

        if(mEvent && mEvent.stopPropagation){
            mEvent.stopPropagation();
        }

чтобы ограничить распространение влияния disableDragging ?

Суть идеи заключается в прямоугольном выделении области карты, без drag'n'drop-a самой карты,

по аналогии с функционалом инструмента Magnifyer.

заранее благодарю за ответы :)

3 комментария
Подписаться на комментарии к посту
Вы правы. При отключении перетаскивания карты с помощью метода disableDragging(), отключаются некоторые события мыши, в частности MouseMove и MouseUp. Поэтому стартовую точку выделения определяем в обработчике события MouseDown, а события mousemove и mouseup ловим у документа. Можете посмотреть на пример реализации. Помогло?
Некоторые dom-события на карте по умолчанию не слушаются, но этим можно управлять с помощью метода listenMouseEvent. Каждый объект которому понадобилось не генерируемое по умолчанию событие должен включить прослушивание вызовом этого метода. Этим же методом можно выключить прослушивание не генерируемого события, причем для этого на каждый вызов с true нужно сделать один вызов с false. Т.е. если два разных объекта независимо друг от друга включили прослушивание, а потом один из них его выключил, событие все равно будет генерироваться, пока и второй объект не отключит прослушивание. Если событие по умолчанию не слушается об этом явно указано в его описании. // включаем прослушивание события map.listenMouseEvent(map.Events.MouseMove, true); // навешиваем обработчик observer_map_mousemove = YMaps.Events.observe(map, map.Events.MouseMove, function (mEvent) { //...some custom code, that need mouse move actions });
Спасибо за ответы! помогло :)