Клуб API Карт

Polygon, interactivityModel и события

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

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

Ставлю полигону interactivityModel в default#transparent, но он все равно отвечает на события.

 

Как можно запретить гео объекту временно не отвечать на события?

7 комментариев
Алексей Yarrr!
28 января 2016, 03:43

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/interactivityModel.storage.xml

Объект всегда получает все дом события.

 

Какая задача? Может просто игнорировать их, как делает это браузер, например?

Евгений Белоусов
28 января 2016, 03:43

задача: возможность включить/выключить, в том или ином гео объекте, обработку событий, не удаляя при этом повешенные на него события.

 

Раз гео объект получает все дом события, то придется сделать уже в самом обработчике события проверку на interactivityModel

Алексей Yarrr!
28 января 2016, 03:43

Если вы готовы так усложнять - то может быть попробовать сделать свою интерактивитиМодель? my#immaterial типа

Евгений Белоусов
28 января 2016, 03:43

что-то я об этом не подумал :)

а есть пример как ее использовать? http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/interactivityModel.storage.xml - тут мало что понятно

Алексей Yarrr!
28 января 2016, 03:43

interactivityModel.storage это объект http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/util.Storage.xml

т.е. регистрация должна (по логике) происходить как-то так:

ymaps.interactivityModel.storage.add ('my#model', iModel)

Как создать объект iModel - надо в исходники лезть смотреть, сходу не скажу. Но думаю, что там несложный интерфейс.


 

Из исходников, как создается #layer:

var layerModel = ymaps.util.extend(

    {}, ymaps.interactivityModel.map /* содержит пустые объекты под евенты */, {

        wheel: { // и тут мы перегружаем нужные

            listenDomEvent: true,

            generateMapEvent: true

        },

        // mousedown пробрасывается, чтобы работал magnifier и drag

        mousedown: {

            listenDomEvent: true,

            generateMapEvent: true

        }

    }

);

ymaps.interactivityModel.storage.add('default#layer', layerModel);

// ymaps в исходниках importsЕсли я правильно догадался - то вам нужно выставить listenDomEvent в false, а второй флаг в тру для всех этих объектов. Наверное ;-)

 

Евгений Белоусов
28 января 2016, 03:43

listenDomEvent - влияет на гео объекты

generateMapEvent - влияет на саму карту

я правильно понял?

Алексей Yarrr!
28 января 2016, 03:43

Я не тестировал, но судя по названиям - вроде да.