Клуб API Карт

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

elmigo
9 мая 2014, 11:29

уже обыскался по клубу, но...

 

проблема: panTo выполняет перемещение на центр, только если чего-то не влезло в пределы видимости

 

    myPlacemark = new ymaps.Placemark([x, y]);
    myPlacemark.events.add('click', function(e){
        var a = [x, y];

        map.setCenter(a); // мгновенное перемещение центра
        //map.panTo(a, {flying: false}); // если метка в пределах видимости и балун вмещается в область карты, то ноль реакции
        //map.setCenter(a, map.getZoom(), {duration: 1000}); // видимо передает управление перемещением на panTo, т.к. реакция такая же
        
    });
    
    map.geoObjects.add(myPlacemark);

 

 

 как?

7 комментариев
Подписаться на комментарии к посту

Если нет реализации, то используя debug режим можно посмотреть как реализуется panTo и реализовать свой panTo, который будет плавно двигать вне зависимости от факта видимости.

Еще можно попросить разработчиков допилить panTo, чтобы им можно было более детально управлять и передавать какой-то параметр, позволяющий делать плавное перемещение. Но в этом случае много неясностей, потому что и зум может учитываться, и какие-то подводные камни возникать.

 

это типа спец.эффект, срабатывающий если растрояние между точками более 3х крат размера видимой области карты, тогда камера отдаляется от карты летит до назначения и приближает вновь, кстати именно в этом случае центрируется на метку и как уже говорил если обе точки в видимой области, то центрирования не происходит

Всеволод Шмыров
12 мая 2014, 10:04
Доброе утро!
Я не совсем понял проблемы.
Метод panTo в версии 2.0 срабатывает мгновенное, если расстояние между текущим и будущим центром слишком большое. Это было сделано для экономии трафика - чтобы не пришлось глузить очень много тайлов, которые отобразятся на доли секунд. В версии 2.1 была добавлена опция "safe", которая отключает такое поведение.
http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Map.xml#panTo
Можно вызвать panTo с safe: false и flying: false. В этом случае произойдет перемещение без резкого "перескока" и без изменения зума.

разговор о версии 2.0, попробую перефразировать, но боюсь повторюсь

 

проблема в том что panTo не выполняет центрирования, если мека находится в видимой области, т.е. вот перед нами карта и метка, но не в центре, по клику на метке срабатывает событие, в котором вызывается panTo, но максимум что происходит это открывается баллун.

 

для наглядности скорректировал один пример из api и прикрутил упомянутые методы центрирования

http://elmigo.ru/test/ymaps_setcenter_test.html

 

Всеволод Шмыров
12 мая 2014, 16:37
Понял проблему. Это наш баг, который мы скоро поправим. При открытии балуна вызывается наш panTo, который перебивает ваш. Без балуна проблемы нет
http://jsfiddle.net/bLL9C/7/

Вы можете:
отключить открытие балуна по клику и самостоятельно открывать балун после движения
http://jsfiddle.net/bLL9C/9/
или отключить авто позиционирование балуна опцией autoPan
http://jsfiddle.net/bLL9C/10/

спасибо, альтернативные решения абсолютно удовлетворяют