Клуб API Карт

Эмуляция клика по метке на карте

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

Есть код, написанный для события по клику на определенную метку на карте. 

placemark.events.add('click', function (e) {...})

Возникла необходимость в некоторых случаях вызывать этот же самый код автоматически при загрузке страницы.
Хочу обойтись малыми изменениями и просто эмулировать событие клика по метке на карте. Можно ли это сделать, и если да, то как? 

9 комментариев
Sergey Konstantinov
28 января 2016, 02:26
placemark.events.fire('click', {
   position: [pageX, pageY]
});
Вместо pageX, pageY подставить позицию клика

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/event.Manager.xml#fire

placemark.events.fire('click', {

    coordPosition: placemark.geometry.getCoordinates(),

    target: placemark

});

Работает почти так, как надо, спасибо!
Но сейчас фокус и зум на метку не перемещаются. Есть ли возможность сделать и автофокус на нее? 

автофокус всмысле установить центр карты по метке?

myMap.setCenter(placemark.geometry.getCoordinates());

myMap.events.add('click', function (e)
{
if (needed_point)
obj_collection.removeFromMap(myMap);
//смотрим на координаты щелчка
//var coords = e.get('coordPosition');
needed_point = new ymaps.Placemark(coords, {},{preset: 'twirl#blueStretchyIcon', draggable: false});
obj_collection = ymaps.geoQuery(needed_point).addToMap(myMap);
console.log(coords);
//находим ближайшую точку мкада
var closestObject = arPlacemarksRez.getClosestTo(coords);
//составляем маршрут между двумя точками
ymaps.route([
closestObject.geometry.getCoordinates(),
coords
]).then(function (route) {
//myMap.geoObjects.add(route);
//пишем дистанцию на метке
var distance = Math.round(route.getLength()/1000);
needed_point.properties.set({iconContent: distance});
});
});


меняю на 


myMap.events.fire('click', function (e)
{
if (needed_point)
obj_collection.removeFromMap(myMap);

//смотрим на координаты щелчка
//var coords = e.get('coordPosition');
needed_point = new ymaps.Placemark(coords, {},{preset: 'twirl#blueStretchyIcon', draggable: false});
obj_collection = ymaps.geoQuery(needed_point).addToMap(myMap);
console.log(coords);

//находим ближайшую точку мкада
var closestObject = arPlacemarksRez.getClosestTo(coords);

//составляем маршрут между двумя точками
ymaps.route([
closestObject.geometry.getCoordinates(),
coords
]).then(function (route) {
//myMap.geoObjects.add(route);

//пишем дистанцию на метке
var distance = Math.round(route.getLength()/1000);
needed_point.properties.set({iconContent: distance});
});


});


и ничего не происходит, метка не появляется
Обновлено 19 сентября 2018, 00:14
s3420,
 технические вопросы лучше задать на Stack Overflow: https://ru.stackoverflow.com/questions/tagged/yandex-maps-api

Там вы сможете собрать интерактивный пример кода и оперативно получить совет.
А как программно кликнуть по кластеру меток?


Подписку на событие включил так:


function onClusterEvent (e) {
var objectId = e.get('objectId');
typeOfIcon = 0;
var cluster = objectManager.clusters.getById(objectId),
objects = cluster.properties.geoObjects;
for (let i = 0; i < objects.length; i++) {
thisPoint = objectManager.objects.getById(objects[i].id);
if (thisPoint.id == ActiveId) {
typeOfIcon = 1;};};
if (typeOfIcon == 0) {
objectManager.clusters.setClusterOptions(cluster.id, {
preset: 'islands#greenClusterIcons'})}
else{objectManager.clusters.setClusterOptions(cluster.id, {
preset: 'islands#darkOrangeClusterIcons'})};}


objectManager.clusters.events.add(['click'], onClusterEvent);


Теперь надо программно вызвать клик по нужному кластеру в нужный момент
Пытаюсь прокликать все кластеры вот так:
objectManager.clusters.each(function (cl) {
   var cluster = objectManager.clusters.getById(cl.id);
   cluster.events.fire('click', {
   coordPosition: cluster.geometry.getCoordinates(),
   target: cluster
});});


На этой конструкции всё останавливается:
cluster.events.fire('click', {
coordPosition: cluster.geometry.getCoordinates(),
target: cluster
Ветка живая?