1

我一直在研究这个有一段时间了,我就是想不通。我有谷歌地图代码,我正试图从 V2 引入 V3。我有一切工作,但覆盖取代了正常的信息窗口。这一行:

$("#infoCallout").appendTo(map.getPane(G_MAP_FLOAT_SHADOW_PANE));

不再适用于 V3。$("#infoCallout") 是隐藏的 div。现在叠加层只显示在左上角......

看看我到目前为止有什么:http: //empulseforum.com/brammoMapV3.php

在 V2 中工作就好了:http: //brammoforum.com/brammo-owners-map.php

我觉得我错过了一些简单的东西。

提前致谢!

4

2 回答 2

1

首先,当我在您的链接上查看新站点时,页面会抛出:Uncaught ReferenceError: markerOffset is not defined at line 73,即(重新格式化):

$("#infoCallout").fadeIn('slow').css({
    top:  markerOffset.y + -107,
    left: markerOffset.x - 40 });

很容易看出,如果没有 ,这段代码将永远无法工作markerOffset,因为上一行(第 72 行)的代码被注释掉了,所以没有定义它:

//var markerOffset = map.fromLatLngToDivPixel(markers.getPosition());

因此,您必须取消注释第 72 行的代码并重构它以通过 v3 api 工作:

  1. 内部调用:markers.getPosition()在 v3 中仍然有效;到目前为止,一切都很好
  2. 外部调用:map.fromLatLngToDivPixel()在 v3 中不再存在;this 和相关的调用已移入类:google.maps.MapCanvasProjection. 投影可通过调用:OverlayView.getProjection()

综合起来,我建议您尝试将displayPoint函数中的代码更改为:

function displayPoint( markers, index ) {
    map.panTo( markers.getPosition() );
    $("#infoCallout").hide();
    updateMemberInfo( pic[index], dN[index], bID[index], cS[index] );

    // Next 2 lines are new and replace the old line of code:
    var prjctn = overlay.getProjection();        
    var markerOffset = prjctn.fromLatLngToDivPixel( markers.getPosition() );

    $( "#infoCallout" ).fadeIn( 'slow' ).css({
        top:  markerOffset.y + -107,
        left: markerOffset.x -40
    });
}

显然,这段代码未经测试,因此您可能需要进行一些调试,但我希望这段代码能让您朝着正确的方向前进。

于 2012-05-04T03:49:59.410 回答
0

使用OverlayViewfromLatLngToContainerPixel方法。

于 2012-05-03T18:16:07.720 回答