Как изменить свойства перетаскиваемой метки API v3 Яндекс карты
Есть несколько маркеров, как мне изменить свойство именно перетягиваемого маркера, а не последнего созданного? То есть как обратиться к нему?
Ответы (2 шт):
Автор решения: Solt
→ Ссылка
навешиваем событие окончании перетаскивания на все геообъекты:
myMap.geoObjects.events.add('dragend',obj_moved);
, в обработчике отлавливаем перетаскиваемый объект:
function obj_moved(e){
logg(e); //Внимательно изучаем событие и ищем всё, что может понадобиться
//Перетаскиваемый объект
var object=e._sourceEvent._sourceEvent.originalEvent.target;
//Координаты
var coords = object.geometry._coordinates;
//Если у объектов есть id, можно достать
var objectId = object.properties._data?.id;
//Делаем с ним что захочется, например скрываем
<коллекция>.setObjectProperties(objectId, {disp:'none'});
}
<коллекция> - это тот объект, который прикрепляли к карте методом myMap.geoObjects.add(<коллекция>);
Автор решения: Евгений
→ Ссылка
Возможно есть другое решение, но сделал так
map = new YMap(
document.getElementById('map'),{
location: {
...
},
}
);
const collection = new YMapCollection({});
$.each(markers, function(key, item) { // markers массив с маркерами
element = //... html разметка маркера ...
marker = new YMapMarker(
{
coordinates: [longitude, latitude],
...,
onDragMove: onDragMoveHandle, // функция отслеживания перемещение маркера
},
properties: {
key: key // добавил свойство для маркеров, индекс массива
}
},
element
);
collection.addChild(marker);
});
map.addChild(collection);
Сама функция
function onDragMoveHandler(coordinates) {
var key = this.properties.key; // получаю наш индекс
map.children[xxx].children[key].update({
// меняем нужный параметр
})
}
Вместо xxx вставляем нужный индекс глобальной переменной map