Программное изменение центра и зума в 2.1 как было в 1.1
В версии Яндекс Карты jsapi 1.1 при программном изменении центра и зума карта сразу устанавливала их, без анимации, после чего прогружалась карта. Выглядело это конечно как изменение вида рывком, но не было ощущения того что карта куда-то плывёт.
В версии 2.1 карта пытается изменить вид с анимацией, из-за чего складывается ощущение что карта плывёт, причем непонятно в какую сторону... Проблема наблюдается в тех случаях, когда меняется зум плавно (т.е. передаётся немного измененный центр и зум каждые несколько миллисекунд). Если меняется только центр, то карта работает отлично, вне зависимости от частоты вызова функции. Если меняется только зум, то нормальное поведение наблюдается только при изменении зума на целые величины.
Например, это можно хорошо увидеть, если поверх карты Яндекс создать карту OpenLayer, и при изменении вида в OL передавать его в Ya:
const yaMap = new YMaps.Map( target[0], { ... }, { maxAnimationZoomDifference: 500, ... } );
const olMap = new ol.Map({ target: target[1], ... });
// ...
const view = olMap.getView();
view.on( 'change:center', onViewToYa );
view.on( 'change:resolution', onViewToYa );
// ...
function onViewToYa() {
const view = olMap.getView();
yaMap.setCenter(
ol.proj.transform( view.getCenter(), 'EPSG:3857', 'EPSG:4326' ),
view.getZoom(),
{ duration: 0 }
)
}
Этот фрагмент кода будет слать события из карты OL в Ya очень часто, примерно, как это происходит у меня. Если событие change:resolution передавать не чаще 100мс, то плавание карты становится гораздо меньше, а если при получении хотя бы одного change:resolution прореживать не только его проброс, но и change:center, то становится ещё лучше... не идеально, но уже терпимо.
Но такой способ можно использовать с OL, если вдруг понадобится зачем-то в качестве подложки использовать Яндекс карты. В моём же случае такой подход не подходит, потому что анимация всё равно выглядит плохо, и хочется вернуть старое поведение, к которому все привыкли - изменение вида без анимации.
В документации нет информации о том как отключить анимацию при зуммировании, а изменения параметра maxAnimationZoomDifference не помогает.
Использование duration: 0 так же эффекта не даёт в данном случае.
Может быть кто-то знает правильный путь?