谷歌infoBox位置

google infoBox position

本文关键字:位置 infoBox 谷歌      更新时间:2023-09-26

我试图根据标记的latLng来定位我的infoBox,我尝试了position(latLng),但没有成功,我不想硬编码pixelOffset,因为它与标记位置不对应,我还尝试了pixel胶印(latLn)、getPosition和setPosition方法。

以上似乎都做得不对:/

for (var i = data.length - 1; i >= 0; i--){
            var Lat = data[i].Item.Coordinate.Lat;
            var Lon = data[i].Item.Coordinate.Lon;
            var LatLon = new gm.LatLng(jobLat, +jobLon);
            var marker = new gm.Marker({
                position: LatLon,
                map: map,
                visible: true
            });
            var infobox = new InfoBox ({
                position: marker.position or LatLon
            });
            marker.newContent = document.getElementById("infobox_"+data[i].Item.Id);
            gm.event.addListener(marker, 'click', (function (marker) {
                return function (pin, suppressInfoWindow) {
                    if (!suppressInfoWindow) {
                            infobox.setContent(marker.newContent);
                            infobox.open(map, marker);
                    }
            }
}
resultMarkers.push(marker);

似乎工作正常

var infoboxWidth = -650/2;
        if(getWidth === 'xs'){
            infoboxWidth = -320/2;
        }
        var infobox = new InfoBox({
            pixelOffset: new gm.Size(infoboxWidth, -65),
            alignBottom: true
        });

data数组上循环,创建标记
每次重新初始化infobox变量以使用当前标记的位置
在循环的末尾,有一个名为infobox的变量,该变量具有最后一个标记的位置。

当你点击任何一个标记时,它会打开该位置的信息框。而不是重新创建的infobox变量的第n次迭代在创建标记时所处的位置。

您所需要做的就是设置信息框在事件侦听器中的位置。

for (var i = data.length - 1; i >= 0; i--){
    var Lat = data[i].Item.Coordinate.Lat;
    var Lon = data[i].Item.Coordinate.Lon;
    var LatLon = new gm.LatLng(jobLat, +jobLon);
    var marker = new gm.Marker({
        position: LatLon,
        map: map,
        visible: true
    });
    var infobox = new InfoBox();
    marker.newContent = document.getElementById("infobox_"+data[i].Item.Id);
    gm.event.addListener(marker, 'click', (function (marker) {
        return function (pin, suppressInfoWindow) {
            if (!suppressInfoWindow) {
                    infobox.setContent(marker.newContent);
                    infobox.setPosition(marker.getPosition());
                    infobox.open(map, marker);
            }
    }
}
resultMarkers.push(marker);