Клуб API Карт

Смена цвета метки при клике и возврат на изначальный цвет при повторном клике

tairov.87
6 ноября 2017, 15:06

Добрый день! Помогите пожалуйста, на карте вывожу метки для доставки товаров, по умолчанию они красные. Оператор должен выбирать метки кликом, они должны становиться зелеными, это у меня получилось. Не знаю как сделать так, чтобы при повторном клике уже на зеленую метку она вновь стала красной.

function addplacemarkrs(coord1, coord2, iContent, hContent) {
	placemark = new ymaps.Placemark([coord1, coord2], {
		iconContent: iContent,
		hintContent: hContent  
		}, {
		preset: 'islands#redCircleIcon'
		})
		placemarkcollection.add(placemark);
		
        placemark.events.add('click', function (e) {
        // Меняем цвет текущей метки
        e.get('target').options.set('preset', 'islands#darkGreenCircleIcon');
        });
}

2 комментария
Уже много писали, не надо навешивать слушателя на каждую метку. Используйте делегирование событий - один слушатель на коллекцию
placemarkCollection.events.add('click', function (e) {
// Метка, на которой сработало событие
var target = e.get('target');
});


Вы можете также установить красный пресет коллекции, а не каждой метке. В обработчике события проверять пресет метки - если его нет, ставить зелёный, если есть - делать unset


if(target.options.get('preset')) {
  target.options.unset('preset');
} else {
  target.options.set('preset', 'islands#darkGreenCircleIcon');
}
Обновлено 8 ноября 2017, 08:13
dimik,
Спасибо вам огромное, все получилось!