На карте создаются геообъекты. У этих объектов есть уникальный для каждого id и при клике открывается попап с информацией о гообъекте (http://clip2net.com/s/3PWEiom). Пожалуйста, скажите, как можно скрыть, сделать видимым снова и эмулировать клик по этому геообъекту зная его id (например, id="place-1"). Вот код создания объектов на карте
(function ($) {
"use strict";
ymaps.ready(init);
var data = [];
var $mapBlock = $('.js-map');
function init() {
var defaultCoords = [55.76, 37.64];
var userCoords = defaultCoords;
//Список городов
var citys = {};
$('.js-dealers-cities').each(function() {
var city = $(this).data('city-name');
var lat = $(this).data('city-lat');
var lng = $(this).data('city-lng');
citys[city] = {};
citys[city]['lat'] = lat;
citys[city]['lng'] = lng;
});
var geolocation = ymaps.geolocation,
myMap = new ymaps.Map('map', {
center: defaultCoords,
zoom: 12,
controls: []
}),
objectManager = new ymaps.ObjectManager({
// Чтобы метки начали кластеризоваться, выставляем опцию.
clusterize: false,
geoObjectOpenBalloonOnClick: true,
clusterOpenBalloonOnClick: false
});
myMap.controls.add('zoomControl', {
position: {
right: 10,
bottom: 110
}
});
geolocation.get({
provider: 'yandex',
mapStateAutoApply: false //true - автоматом центровать по положению пользователя
}).then(function (result) {
//Координаты пользователя
userCoords = result.geoObjects.position;
myMap.setCenter(userCoords, 6, { flying: true, duration: 0 }); } });
myMap.geoObjects.add(objectManager);
$mapBlock.find('.map-point').each(function () {
var $that = $(this);
var coords = $(this).data('coords').split(',');
if (!Layout.isDesktopLayout()) {
data.push({
"type": "Feature",
"id": $that.data('id'),
"geometry": {
"type": "Point",
"coordinates": coords
}
});
} else {
data.push({
"type": "Feature",
"id": $that.data('id'),
"geometry": {
"type": "Point",
"coordinates": coords
},
"properties": {
"balloonContent": $that.html()
}
});
}
});
objectManager.add(data);
function onObjectEvent(id) {
console.log(id);
objectManager.objects.setObjectOptions(id, {
balloonOffset: [-105, -35],
hideIconOnBalloonOpen: false,
balloonAutoPanMargin: 5,
iconLayout: 'default#image',
iconImageHref: '/themes/frontend/html/static/images/map-point.svg',
iconImageSize: [25, 38],
iconContentOffset: [-12, -19]
});
}
function openPopup(e) {
if (!Layout.isDesktopLayout()) {
Popups.openById(e.get('objectId'));
}
}
$mapBlock.find('.map-point').each(function () {
objectManager.objects.events.fire('click', onObjectEvent($(this).data('id')));
});
objectManager.objects.events.add('click', openPopup);
}
})(jQuery);
Доброе утро.
К сожалению, ObjectManager не учитывает опцию "visible" у объекта. Так что единственный способ скрыть объект с карты в OM - это удалить его из менеджера.
Эмулировать событие в теории можно. Если взять координаты геообъекта через метод getById и вызвать objectManager.objects.events.fire('click', ... с этими данными. Но если задача состоит в том, чтобы вызывать открытие попапа программно, то архитектурно правильней будет это делать не через обработчик нативного события. Но тут уж надо задачу понять.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Все приветПодскажите, пожалуйста, поставил этот скрипт "Inputmask" Ставлю такую маску { "mask": "8(###)###-##-##", "type": "mobile" } она выглядит так мне необходимо...
Всем привет, и легкого кодинга, помогите решить проблемус Gulp Browser-Sync
Господа, у меня есть объект с разным уровнем вложенностиКак я могу получить то или иное значение я знаю, ниже есть наглядный пример: