1

我正在使用 InfoWindow domready 事件处理程序来修改 InfoWindow 的外观。

google.maps.event.addListener(popup, 'domready', function() {

我正在使用 jquery 更改 InfoWindow 的一些内部 div 的高度。

问题是高度发生变化并立即重置为默认大小。此外,事件处理程序被调用两次。

并非所有的 div 都会重置它们的大小,只有一些会这样做。

我的部分代码:

popup = new google.maps.InfoWindow({
    content:'<image id="pin_' + pin_count + '" src="question.png"/>'
});

// Parent.Parent.Parent
e = $('#pin_' + pin_count).parent().parent().parent();
console.log(e.height());
h = parseFloat(e.height());
e.css({
    'position' : 'absolute',
    'top' : '-100px',
    'height' : (h + 100) + 'px',
    'border-radius' : '16px 16px 16px 16px',
    'border' : '2px solid red',
});
console.log(e.height());
console.log("...");

除了 domready 之外,我还可以使用其他任何事件,它可以让我在完全绘制后修改 InfoWindow 吗?

4

1 回答 1

0

我找到了一条出路......每当将 InfoWindow 添加到 Map 时,都会重新绘制所有图块,并且所有 InfoWindow 标记也会随之重置。

所以,我尝试了

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

它保留了我的更改,但我遇到了一个不同的问题。

这将在地图上发生任何事情时调用,例如拖动、缩放等。我必须为每个标记保留标志,并且只有在加载标记时才执行此操作。

无论如何要等待两个事件一起发生吗?

更新:

当我得到domready事件时,我正在设置一个标志。当我得到下一个tilesloaded时,我检查标志并调整我的 InfoWindow。这是工作。但又是一个问题。

如果我在同一坐标处再添加一个标记,则不会重新加载图块并且tilesloaded不会生成事件。

还有一个问题,我可以将地图中的所有事件都放到一个处理程序中吗?

更新 2

我发现了这个问题。作为实际 InfoWindow 内容的第三个父级的 div 是唯一重置其大小的元素。

所以,当我收到tileloaded事件时,我正在检查div的高度,如果它已被重置,那么我再次设置高度......

google.maps.event.addListener(map, 'tilesloaded', function() {
    e = $('#pin_' + pin_count).parent().parent().parent();
    // default height is saved before the div is resized in domready event handler
    if (e.css("height") < default_height) {
        h = parseFloat(e.height());
        e.css({
            'height' : (h + 100) + 'px',
        });
    }
});
于 2012-12-19T06:53:00.277 回答