Клуб API Карт

Перемещение карты при клике на ссылку

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

 Здравствуйте! Подскажите, пожалуйста, как получить "заставить" перемещаться карту при клике на ссылку?

 

 Карта у меня вызывается так

function init() {
var search_query = '<?= $city ?>'; //город пользователя на основе ip

ymaps.geocode(search_query, { results: 1 }).then(function (res) {
var firstGeoObject = res.geoObjects.get(0),

myMap = new ymaps.Map("map", {
center: firstGeoObject.geometry.getCoordinates(),

 

Далее на карте формируется список объектов, в зависимости от того из какого города пришел пользователь

myPointGeoObject8 = new ymaps.GeoObject({
geometry: {
type: "Point",
coordinates: [55.12059336166458,61.23999754716336]
},
properties: {
   iconContent: 'тест',
balloonContent: 'тест<br /><a href="/map/map_8.html">Узнать больше</a>'
}
}, {
preset: 'twirl#redStretchyIcon',
    });

 

 

Слева от карты список объектов в виде ссылок, при клике по которым должен открываться балун и карта должна перемещаться

<span onclick="openBalloonById(myPointGeoObject8,myMap)">тест</span>

Вобщем то проблем с открытием балуна нет, а с перемещением карты есть, вот функция которая за это отвечает

function openBalloonById(object_id,maps){
object_id.balloon.open(); //открыть нужный балун
maps.setZoom(11).panTo(object_id.geometry.getCoordinates()); //переместить по координатам метки
}

 

Ошибка в консоли

 

Uncaught exception: ReferenceError: Undefined variable: myMap

 

6 комментариев

Значит переменная по тем или иным причинам не видна.

Перед ней точно var не стоит?

точно не стоит

зачем передавать карту в функцию параметром (maps), если переменная myMap итак глобальная?

это уже потом добавил, проверить, изначально было так myMap.setZoom(...

Значит без полного кода примера не обойтись.

 Вобщем тут вопрос скорее в области видимости, а не в апи. Карту сделал немного по-другому, теперь работает. Вот код, может кому пригодится

ymaps.ready(init);
function init() {
var search_query = 'ГОРОД ПОЛЬЗОВАТЕЛЯ';
var myPointGeoObject = new Array();
ymaps.geocode(search_query, { results: 1 }).then(function (res) {
var firstGeoObject = res.geoObjects.get(0),
myMap = new ymaps.Map("map", {
center: firstGeoObject.geometry.getCoordinates(),
zoom: 9,
behaviors: ["default", "scrollZoom"]
});

myMap.controls
.add('zoomControl', { left: 5, top: 5 })
.add('typeSelector')
.add('mapTools', { left: 35, top: 5 });


myPointGeoObject[1] = new ymaps.GeoObject({
geometry: {
type: "Point",
coordinates: [КООРДИНАТЫ]
},
properties: {
iconContent: 'НАЗВАНИЕ',
balloonContent: 'ОПИСАНИЕ
Узнать больше'
}
}, {
preset: 'twirl#redStretchyIcon',
draggable: false
});
myMap.geoObjects.add(myPointGeoObject[1]);

//по клику открывается балун и перемещается карта, центр координаты метки
$(document).on('click','.oneLevelSpan',function(){
var id = $(this).data("id");
var coords = myPointGeoObject[id].geometry.getCoordinates();
myPointGeoObject[id].balloon.open();
myMap.setZoom(14).panTo(coords,{
flying: 1
});
});

});
}

 

html:

Название объекта который надо открыть