По счастливой случайности, я недавно хотел добиться того же эффекта и нашел решение, которое я сделал пост о. По сути, просто установить тайм-аут для каждого перехода недостаточно, потому что это может легко привести к увеличению масштаба «старт-стоп», если эффект масштабирования Google еще не закончен или уже давно завершен.
Как упоминал Мартин, в этом есть некоторые недостатки, которые я не буду повторять. Используете ли вы это в конце концов, ваш выбор, и во многом зависит от мощности процессора вашего пользователя и / или браузера. Тем не менее, это хороший эффект, и, если использовать его с умом, обязательно произойдет впечатление.
Мое решение было следующим:
// example marker:
var marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(-20.3,30.3)
});
// add the double-click event listener
google.maps.event.addListener(marker, 'dblclick', function(event){
map = marker.getMap();
map.setCenter(overlay.getPosition()); // set map center to marker position
smoothZoom(map, 12, map.getZoom()); // call smoothZoom, parameters map, final zoomLevel, and starting zoom level
});
// the smooth zoom function
function smoothZoom (map, max, cnt) {
if (cnt >= max) {
return;
}
else {
z = google.maps.event.addListener(map, 'zoom_changed', function(event){
google.maps.event.removeListener(z);
smoothZoom(map, max, cnt + 1);
});
setTimeout(function(){map.setZoom(cnt)}, 80); // 80ms is what I found to work well on my system -- it might not work well on all systems
}
}
В сущности, все сводится к настройке уровня масштабирования по одному, прослушиванию события zoom_changed
, ожиданию 80 мс, а затем повторной настройке уровня масштабирования еще раз и т. Д. Что приятно, так это событие zoom_changed
Кажется, он вызывается после плавного перехода, предоставляемого Google Maps, но до фактические изображения загружаются, поэтому он не тратит слишком много пропускной способности.
80 мс в тайм-ауте - это тоже волшебное число, которое я придумал - вам бы посоветовали сделать более тщательный тест и посмотреть, что работает в разных системах и браузерах, и, возможно, немного изменить алгоритм на основе ваших результатов. или для разных систем.
Вероятно, также нет необходимости каждый раз добавлять и удалять слушателя, но вы можете сделать это небольшое улучшение самостоятельно, если хотите.