Клуб API Карт

Балун принимает события карты

Павел Колтышев
19 октября 2011, 11:05

При наведении на балун отображаются заголовки меток карты. На балуне отрабатывают обработчики событий карты. Как можно с этим побороться?

P.S. используем "активные области" и свой макет балуна

 

 

// Макет для балуна, реализующий интерфейс YMaps.IBalloonLayout
    function SampleBalloonLayout() {
        this.element = YMaps.jQuery("<div class=\"baloon\">\
        <div class=\"inner\">\
        <div class=\"inner-inner\">\
        <a href=\"#\" class=\"icon-close right\"></a>\
        <div class=\"content\"></div>\
        </div></div></div>");

        this.close = this.element.find(".icon-close");
        this.content = this.element.find(".content");

        // Отключает кнопку закрытия балуна
        this.disableClose = function(){
            this.close.unbind("click").css("display", "none");
        };

        // Включает кнопку закрытия балуна
        this.enableClose = function(callback){
            this.close.bind("click", callback).css("display", "");
            return false;
        };

        // Добавляет макет на страницу
        this.onAddToParent = function (parentNode) {
            YMaps.jQuery(parentNode).append(this.element);
            this.update(
            // Действие для метки на карте
            $('input:checkbox[name^=product]').bind('click', function(){
                clickToggleProduct($(this)
            }
        };

        // Удаляет макет со страницы
        this.onRemoveFromParent = function () {
            this.element.remove(
        };

        // Устанавливает содержимое
        this.setContent = function (content) {
            content.onAddToParent(this.content.empty()[0]
        };

        // Обработка обновления
        this.update = function () {
            this.element.css("margin-top", this.getOffset().getY()
        };

        // Возвращает сдвиг макета балуна относительно его точки позиционирования
        this.getOffset = function () {
            return new YMaps.Point(0, -this.element.outerHeight() + 55);
        };

        // Устанавливает максимально допустимый размер содержимого балуна
        this.setMaxSize = function (maxWidth, maxHeight) {};
    }

    // Задаем свой макет для балуна по-умолчанию
    YMaps.Templates.add('default#balloon', new YMaps.LayoutTemplate(SampleBalloonLayout)

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

Вам придётся блокировать те события, которые не должны попадать на карту. Примерно так:

this.onAddToParent = function (parentNode) {
            YMaps.jQuery(parentNode).append(this.element);

            YMaps.jQuery(this.element).bind('click mousedown mouseup', function ($e) { var e = new YMaps.MouseEvent($e.originalEvent, map); e.preventMapEvent(); });

...

см. http://api.yandex.ru/maps/jsapi/doc/ref/reference/mouseevent.xml#preventMapEvent