【问题标题】:Google Maps API v3 - Custom Info boxGoogle Maps API v3 - 自定义信息框
【发布时间】:2012-10-04 02:29:23
【问题描述】:

我正在通过 Google Maps API 工作,并且到目前为止有以下内容:

var infowindow = null;

$(document).ready(function () { initialize();  });

function initialize() {

    var centerMap = new google.maps.LatLng(39.828175, -98.5795);

    var myOptions = {
        zoom: 4,
        center: centerMap,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    setMarkers(map, sites);
    infowindow = new google.maps.InfoWindow({
            content: "loading..."
        });

    var bikeLayer = new google.maps.BicyclingLayer();
    bikeLayer.setMap(map);
}

var sites = [
    ['Mount Evans', 39.58108, -105.63535, 4, 'This is Mount Evans.'],
    ['Irving Homestead', 40.315939, -105.440630, 2, 'This is the Irving Homestead.'],
    ['Badlands National Park', 43.785890, -101.90175, 1, 'This is Badlands National Park'],
    ['Flatirons in the Spring', 39.99948, -105.28370, 3, 'These are the Flatirons in the spring.']
];



function setMarkers(map, markers) {

    for (var i = 0; i < markers.length; i++) {
        var sites = markers[i];
        var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: sites[0],
            zIndex: sites[3],
            html: sites[4]
        });

        var contentString = "Some content";

        google.maps.event.addListener(marker, "click", function () {
            //alert(this.html);
            infowindow.setContent(this.html);
            infowindow.open(map, this);
        });
    }
}

我尝试创建一个Fiddle,但它没有显示出来。

所以,地图支持多个位置和信息框,但我仍然很困惑的部分是自定义信息框。我进行了一些搜索并看到了this question/answer,但我无法准确理解它是如何工作的。所以,假设我有我的#map_canvas 地图,然后在此之外,我有一个现有的#info div(我希望加载每个信息框)。所以 - 样式没有在 Google Maps API 中定义,它是一个现有的元素,应该作为信息框。

是否有人能够推动我(或者在这种情况下,推动一下会很棒)以帮助我更好地理解如何做到这一点?可以在here 找到我的想法的快速屏幕截图。地图顶部的深红色框是目标。

自定义标记和“活动”状态(所选标记的金色图标)也是另一个挑战,但我还没有放弃对这些的所有希望。任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 你的小提琴有几个问题,这是一个工作版本:jsfiddle.net/LycXe/2;问题:1.没有jquery,但使用“$”。 2. Google Maps API 需要包含 &dummy=.js(根据文档),以便将其识别为 javascript。

标签: javascript google-maps


【解决方案1】:

已经有一段时间了,但这应该可以。

创建标记时,将要附加的任何数据附加到此标记。

这里是使用 setMarkers 函数。很高兴你添加了它(想知道你的循环在哪里)

在 html 中有你的 div 来获取这些数据,比如

 <div id="myDivID"></div>

在你的 js 中添加对它的引用并在那里插入 html

function setMarkers(map, markers) {
    var myContentDiv = document.getElementById('myDivID');//Reference to you DOM elem  

    for (var i = 0; i < markers.length; i++) {
        var sites = markers[i];
        var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
        var marker = new google.maps.Marker({
            position: siteLatLng,
            map: map,
            title: sites[0],
            zIndex: sites[3],
            html: sites[4]
        });

        var contentString = "Some content";
        //marker.xtraData = 'SomeExtraData';//You can even add more data this way

        google.maps.event.addListener(marker, "click", function () {
            //alert(this.html);
            var myTemplate = '<h1>'+this.title+'<h1><p>'+this.html+'</p>';

            myContentDiv.innerHTML = myTemplate;//Inset this html inside link
            //infowindow.setContent(this.html);
            //infowindow.open(map, this);
        });
    }
}

根据您的工作,您可能还想查看传单。它比移动浏览器上的谷歌地图快很多,而且比ios6地图更好。呵呵。

【讨论】:

  • 哇——太棒了。我真的很感谢你花时间把它写出来。显然现在看着它,它是“哦,是的,当然!”但没有你的帮助就不会到达那里。再次感谢!
  • 呵呵,是的。你在那里有 99.9999999%。你已经设置好了警报和东西。如果有机会,请顺便结帐传单,而且您不需要公共交通和街景的令人敬畏的功能。如果您只需要地图,传单很快。
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多