Клуб API Карт

Как отловить событие - клик мышкой?

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

Собственно пример здесь. В примере надо навести мышку на Москву, появится желтый многоугольник, и кликнуть.

Чего я хочу получить: 

   1. С помощью модуля "Слои активных областей" нарисовать здания.

   2. При наведении на здании, подсветить здание - нарисовав полигон.

   3. При клики по нарисованному полигону запустить ajax-запрос.

Я предпалогал, что на п.3 должен сработать код:

 

//Ловим событие при клики на дом poligon
YMaps.Events.observe(polygon, polygon.Events.Click, function () {
   alert("Щелк!");
}

 

но событие не обрабатывается.

Вопросы:

1. Почему не обрабатывается событие?

2. При клики по полигону, сам полигон исчезает - почему он исчезает? ведь я его не стираю?


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

Работает конечно жестоко :)

У вас есть одна корневая проблема - YMaps.Events.observe(hLayer, hLayer.Events.MouseEnter вызывается ДВА раза.

а после увода мышки два раза получим leave.

Давайте распишу.

Вы наводите мышку, происходит MouseEnter, появляется полигон

Вы кликаете, почему-то происходит еще один MouseEnter, после чего вы ДОБАВЛЯЕТЕ в текуший полигон еще немного точек.

Как можно заметить - после этого от полигона остается только контур(потому что он как-бы перетирает сам себя, любой пиксель где графика рисуется четное колличетство раз - прозрачно)

И что в итоге - дырки они как-бы не кликабельны.

Самое простое решение - обнулять геометрию полигона при создании, либо как-либо превентить второй запуск mouseEnter. Последнее также(теоритески) возможно если вы перехватите событие mouseDown на полигоне.



Да.. глубокое понимание предмета. Про затирание графики и дырки ни за что бы не догадался. Спасибо.

Sergey Konstantinov
28 января 2016, 05:34

Создавайте полигон неинтерактивным (YMaps.Interactivity.NONE http://api.yandex.ru/maps/jsapi/doc/ref/reference/interactivegeoobjectoptions.xml#interactive) и слушайте все нужные события на хотспоте.

Действительно помогло. Перед добавлением полигона на карту, установил свойство:

 

polygon.setOptions({interactive:"NONE"});

 

 а событие кликом слушаю на хостпосте:

 

    YMaps.Events.observe(hLayer, hLayer.Events.Click, function(linkLayers,            linkHotspotsObject, objMouseEvent, myIShape) {}

и работает. Спасибо.

 

и это событие

 

YMaps.Events.observe(polygon, polygon.Events.Click, function () {       alert("Щелк!");    });
теперь нормально работает