Клуб API Карт

Собственные обьекты на карте - mousewheel + mousemove

NIzhikov
26 декабря 2013, 15:50

Добрый день.

 

Я добавляю на карту(yandex map api v.2) собственный div.

Внутри которого рисую собственные html-элементы на карте

div добавляется внутрь этого элемента:

 

map.panes.get('overlays').getElement()

 

Когда мышка находится над моим элементом, не срабатывают события колеса мыши(карта не приближается и не отдаляется),

а также нельзя перетащить карту(опустить мышку и потянуть).

Как это исправить?

14 комментариев
Подписаться на комментарии к посту

А какое поведение вам нужно? Чтобы элемент визуально отображался, но был неактивным?

Или вам хочется ловить события на этом дом-элементе?

> А какое поведение вам нужно?

Поведение аналогичное стандартной метке.

При клике на нее она обрабатывает клик.

При скроллинге и перетаскивании реагирует карта.

 

> Чтобы элемент визуально отображался, но был неактивным?

1. Что бы он отобразился: с этим проблем нет

2. Я ловил на нем события клик и двойной клик: с этим проблем нет

3. При скроллинге и перетаскивании двигалась карта: это не работает.


> Или вам хочется ловить события на этом дом-элементе?

Я уже ловлю нужные события. Хочется, что бы другие события, которые не ловлю обрабатывались картой.

А какая у вас версия апи? 2.0 или 2.1?

1. В описании Map есть список событий, генерируемых картой. Надо оттуда взять список событий, которые являются реакцией на дом (клики, маусэнтеры и прочие).

2. Через наш domEvent.manager подписываетесь на все эти события на вашем объекте.

3. Для событий, которые нужно пропустить на карту, генерируете событие MapEvent, и кидаете его на карте.

 

Должно сработать.

Делаю так.

Ошибок не происходит, но и действий на карте тоже нет.

 

 

ymaps.domEvent.manager.add(overlay.markerLayer.get(0), ['mousedown', 'mouseup', 'mousemove', 'wheel'], $.proxy(function (e) {

        console.log(e);

        this.map.events.fire(e.get('type'), new ymaps.MapEvent({

            type: e.get('type'),

            position: e.get('position'),

            target: this.map

        }, this.map));

    },  this))

 

1.  попробуйте еще передать ссылку на  domEvent при создании события.

this.map.events.fire(e.get('type'), new ymaps.MapEvent({

            type: e.get('type'),

            position: e.get('position'),

            target: this.map,

            domEvent: e.get('domEvent')

        }, this.map));

2. Если это не поможет, дайте ссылку на страницу

Привет.

Спасибо, за советы. К сожалению, не помогло.

Вот страница:

http://images.russoutdoor.ru/sales/buying/wizard/step2/retail.do?startDate=01.01.2014&endDate=31.01.2014&mode=retail&billboardTypeID=1®ionID=4

 

код обработчика события в файле map.yandex2.js строка 48

 

 


 Надо ковыряться, почему этот способ не работает. Не знаю, когда руки дойдут. А почему не подходит вариант просто добавить геообъект с произвольным макетом и указать ему модель интерактивности default#layer?

Привет.

Спасибо, за помощь.

 

Код, который отрисовывает точки("кружочки") на карте не зависит от провайдера карт.

Мы поддерживаем google, yandex, open street map(космоснимки + 2gis).

Поэтому, способ вывода точки на карту менять крайне нежелательно.

 Нашла, в чем был косяк. Рабочий вариант

ymaps.domEvent.manager.add(pm, [

            'mousedown',

            'wheel'

        ], function (e) {

            myMap.events.fire(e.get('type'), new ymaps.MapEvent({

                type: e.get('type'),

                target: myMap,

                position: e.get('position'),

                domEvent: e

            }, myMap));

        });

Привет.

Спасибо, это помогло.

Немного поторопился.

Работает перетаскивание, реакция на колесо, двойно клик левой кнопкой

А увеличение масштаба по двойному клику правой кнопкой мыши не работает.

Причем уменьшение масштаба по двойному клику левой кнопкой работает.


    ymaps.domEvent.manager.add(overlay.markerLayer.get(0), [

        'mousedown',

        'mouseup',

        'click',

        'dblclick',

        'wheel'

    ], $.proxy(function (e) {

        console.log(e.get('type'));

        this.map.events.fire(e.get('type'), new ymaps.MapEvent({

            type: e.get('type'),

            target: this.map,

            position: e.get('position'),

            domEvent: e

        }, this.map));

    }, this));

 

Судя по логу, по правой кнопке не приходят события click и doubleclick.

Только mousedown и mouseup.

Можно это как-то победить?

 

Вот в этом примере - http://api.yandex.ru/maps/jsbox/placemark

Двойной клик по надписи "Метка" работает как надо.