10

使用地图 API v3。根据 Google 文档,如果地图容器以编程方式调整大小,则必须手动触发地图调整大小事件。

Resize 事件:当 div 改变大小时,开发者应该在地图上触发这个事件。

因此我使用:

google.maps.event.trigger(map, 'resize');

我应该使用哪个侦听器来根据调整大小的地图容器的新边界来更新我的标记?

google.maps.event.addListener(map, 'resize', function() {

    console.log(map.getBounds());
});

上面仍然显示了调整大小之前的界限。

4

3 回答 3

14

每当调整地图大小时,边界都会改变。因此,您可以使用该bounds_changed事件:

google.maps.event.addListener(map, 'bounds_changed', function() {
    var bounds = map.getBounds();
});

它有以下描述:

当视口边界发生变化时会触发此事件。


如果您只想在地图调整大小后调用事件,则可以使用布尔变量来跟踪地图是否刚刚调整大小,如下所示:

var mapResized = false;

然后,无论何时触发该resize函数,都可以将mapResized变量设置为true. 你可以使用一个函数来做到这一点:

function resizeMap(map) {
    google.maps.event.trigger(map, 'resize');
    mapResized = true;
}

然后,在这种情况bounds_changed下,您只能对调用 ifmapResized为 true 做出反应,然后设置mapResizedfalse

google.maps.event.addListener(map, 'bounds_changed', function() {
    if (mapResized) {
        // react here
    }
    mapResized = false;
}
于 2012-08-19T22:24:14.583 回答
2

如果你想知道bounds什么时候改变,你需要监听“bounds_changed”事件

google.maps.event.addListener(map, 'bounds_changed', function() {
    console.log(map.getBounds());
});

如果您只想要触发调整大小事件后的第一个 bounds changed 事件,您可以使用:

google.maps.event.addListenerOnce(map, 'bounds_changed', function() {
    console.log(map.getBounds());
});

在触发调整大小事件之前。

于 2012-08-19T22:24:00.083 回答
1

在 Angular.js 和 IONIC 上,我通过在 ** 之后插入此代码来解决

declaration of var map = new google..... :
google.maps.event.addListenerOnce(map, 'bounds_changed', function () {
   google.maps.event.trigger(map, 'resize');
   var bounds = map.getBounds();
});
于 2016-05-26T12:44:58.357 回答