【发布时间】:2017-09-02 14:53:26
【问题描述】:
我对 Google Maps API 很陌生,我想知道是否有办法强制放大到特定位置,例如:美国。
我正在寻找的是一种模拟鼠标滚轮放大效果的方法,如果光标在美国,当您使用滚轮放大时,中心将开始向光标。
我尝试使用 'zoom_changed' 事件并动态更改中心,但由于它不是在桌面(设备模式)中运行,因此该事件仅在最后触发 (source)。
这是我的代码:
var map;
var centerUS;
var currentCenter;
var currentZoom;
function initMap() {
//define Map
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 0, lng: 0},
zoom: 3,
disableDefaultUI: true
});
//limit the zoom
map.setOptions({ minZoom: 3, maxZoom: 10 });
//initialization of variables
currentZoom = map.getZoom();
currentCenter = map.getCenter();
centerUS = new google.maps.LatLng(40, -100);
//add the listener for zooming in
map.addListener('zoom_changed', function () {
zoomInTheUS();
});
}
function zoomInTheUS() {
//get new values
var newZoom = map.getZoom();
currentCenter = map.getCenter();
//if the user is zooming in
if (newZoom > currentZoom) {
//difference between the current center and the center of the US
var changeLat = centerUS.lat() - currentCenter.lat();
var changeLng = centerUS.lng() - currentCenter.lng();
//approach the center of the US by a factor of 10% of the distance
var newLat = currentCenter.lat() + changeLat * 0.1;
var newLng = currentCenter.lng() + changeLng * 0.1;
//define new center and pan to it
var newCenter = new google.maps.LatLng(newLat, newLng);
map.panTo(newCenter);
}
//actualize the value of currentZoom
currentZoom = newZoom;
}
我尝试在“拖动”事件期间执行此操作,因为它被反复触发,但它不起作用。我认为这可能是因为事件触发非常快,并且 newZoom 和 currentZoom 变量几乎总是具有相同的值。或者,在设备模式下,来自 Google Maps API 的缩放变量可能会在事件结束时刷新。我只是假设,我不知道。
有没有办法实现我想要的?我想在检测到 2 个手指时禁用平移,或者可能从设备模式更改为非设备模式,但我没有找到任何相关信息。
提前谢谢你。
【问题讨论】:
-
你可以省去麻烦,只提供美国的瓷砖,这样用户即使想看也看不到美国以外的地方。
-
如果有帮助,请查看我的答案,如果没有,请发布您自己的答案。