Клуб API Карт

Перехват клика на кластере не работает

babymar
17 августа 2015, 14:36

API 2.0

Пытаюсь перехватить события маркеров кластера при клике и даблклике.

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

Когда маркер кластера "групповой" - перехват не работает. Открывается балун. И срабатывает алерт. (((

 

    var myMap;
    var clusterer;
    var PointArray = [];

    ymaps.ready(init);

    function init(){ 
        myMap = new ymaps.Map ("map", {
            center: [47.096022, 37.548734],
            zoom: 12
        },{     minZoom:8,
              maxZoom:18
        });

        myMap.controls.add('zoomControl', { left: 5, top: 5 });
        myMap.behaviors.enable('scrollZoom');
        myMap.behaviors.disable('dblClickZoom');

        clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true, synchAdd: true});

        clusterer.events.add('dblclick', function (e) {
           e.preventDefault();
            alert('clusterer dblclick');   
        });

        clusterer.events.add('click', function (e) {
           e.preventDefault();   
           alert('clusterer click');   
        });

        addToPointArray(47.091, 37.541, 'twirl#redIcon', 'id1', 'text1');
        addToPointArray(47.093, 37.543, 'twirl#redIcon', 'id2', 'text2');
        addToPointArray(47.095, 37.545, 'twirl#redIcon', 'id2', 'text2');

drawCluster('twirl#blueIcon');
       
   }

    function addToPointArray(CoordX, CoordY, IStyle, ID, Text){
        point = new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: [CoordX, CoordY]},
            properties: {
                clusterCaption: ID,
                balloonContentBody: Text,
            balloonContentHeader: ID,
                //balloonContentFooter: "Подвал",
                hintContent: ID
            }
        },{
            preset: IStyle
           
        });

        point.events.add('click', function (e) {
           //e.preventDefault();       
        });

        point.events.add('dblclick', function (e) {
            //e.preventDefault();
        });

        PointArray.push(point);
    }

    function drawCluster(CStyle){
        clusterer.options.set('preset',CStyle);
        clusterer.add(PointArray);

        myMap.geoObjects.add(clusterer);
    }   


Пример - здесь:

 https://jsfiddle.net/bdv09t1n/ 

5 комментариев

Вешать обработчики на каждый геообъект в кластеризаторе плохая идея. Навешивайте только на кластеризатор и не используйте алерты для отладки. Только console.log и debugger;

Подкорректировал свой пример https://jsfiddle.net/bdv09t1n/4/

Даже если убрать обработчики событий с каждой точки (а они у меня вобщем-то были закомментарены, но не в этом суть) и оставить для кластеризатора только

        clusterer.events.add('dblclick', function (e) {
           e.preventDefault();
        });

        clusterer.events.add('click', function (e) {
           e.preventDefault();   
        });

поведение кластера не меняется - на точках балун не открывается, на группе точек - открывается. Перехвата дефолтного действия не происходит.

 

 У меня preventDefault работает и если его заккоментировать

балун открывается на одиночных метках

https://jsfiddle.net/bdv09t1n/6/

ЧЯДН?

Я наверно, плохо излагаю вопросы, сорри ((

Как понимаю для click и dblclick на метке геообъекта (а в данном случае - кластера) дефолтным действием является открытие балуна.

Задам свой вопрос по другому: как за счет использования preventDefault на событиях click и dblclick отключить открытие балуна на "групповом" маркере кластера? У меня не получается.

Ставлю preventDefault на оба события, но балун все равно открывается.

Опция кластеризатора

clusterOpenBalloonOnClick: false

И у вас еще стоит это:

clusterDisableClickZoom: true