2013-03-01 218 views
2

我试图按照这个示例合并自定义信息框,但我的代码只是不起作用。有人能看一看,看看我哪里出错了吗?谷歌地图定制信息框

我已经评论了示例代码的开始/结束位置以及我想要调用它的位置。

function initialize() { 

var mapOptions = { 
    zoom: 12, 
    center: new google.maps.LatLng(52.204872,0.120163), 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    styles: styles, 
    scrollwheel: false 
}; 

var map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions); 

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

}); 
} 

var sites = [ 
    // List all locations for each pin 
['The Frontroom', 52.202977,0.138938, 1, '<p>The Frontroom. <br/>23-25 Gwydir Street, Cambridge, CB1 2LG <br/>01223 305 600</p>'], 
]; 

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], 
     icon: "http://visualartscambridge.org/wp-content/uploads/2013/03/map-pin.png" 
    }); 
    // Begin example code to get custom infobox 
    var boxText = document.createElement("div"); 
    boxText.style.cssText = "border: 1px solid black; margin-top: 8px; background: yellow; padding: 5px;"; 

    var myOptions = { 
      content: boxText 
      ,disableAutoPan: false 
      ,maxWidth: 0 
      ,pixelOffset: new google.maps.Size(-140, 0) 
      ,zIndex: null 
      ,boxStyle: { 
       background: "url('tipbox.gif') no-repeat" 
       ,opacity: 0.75 
       ,width: "280px" 
      } 
      ,closeBoxMargin: "10px 2px 2px 2px" 
      ,closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif" 
      ,infoBoxClearance: new google.maps.Size(1, 1) 
      ,isHidden: false 
      ,pane: "floatPane" 
      ,enableEventPropagation: false 
    }; 
    // end example code for custom infobox 

    google.maps.event.addListener(marker, "click", function() { 

     infowindow.setContent(this.html); 
     // Call myOptions when marker is clicked and opened 
     infowindow.open(map, myOptions, this); 
    }); 
} 
} 

google.maps.event.addDomListener(window, 'load', initialize); 
+0

什么是在控制台窗口的输出? – user2019515 2013-03-01 19:08:11

+0

页面加载时没有错误,当我单击一个别针时出现以下错误:'Uncaught TypeError:Object# has no method'get'' – egr103 2013-03-01 19:13:22

+0

获得了指向特定页面的链接? – user2019515 2013-03-01 19:14:59

回答

5

删除现有代码的这个部分,以及:

google.maps.event.addListener(marker, "click", function() { 

    infowindow.setContent(this.html); 
    // Call myOptions when marker is clicked and opened 
    infowindow.open(map, myOptions, this); 
}); 

与此替换它从资讯盒例如:

var ib = new InfoBox(myOptions); 

google.maps.event.addListener(marker, "click", function (e) { 
    ib.open(map, this); // change the map variable appropriately 
}); 

working example

为多个点,用函数的封闭件(一个createMarker函数)来维护标记和infoBox之间的关联:

function createMarker(site, map){ 
    var siteLatLng = new google.maps.LatLng(site[1], site[2]); 
    var marker = new google.maps.Marker({ 
     position: siteLatLng, 
     map: map, 
     title: site[0], 
     zIndex: site[3], 
     html: site[4] /* , 
     icon: "http://visualartscambridge.org/wp-content/uploads/2013/03/map-pin.png" this icon no longer available */ 
    }); 
    // Begin example code to get custom infobox 
    var boxText = document.createElement("div"); 
    boxText.style.cssText = "border: 1px solid black; margin-top: 8px; background: yellow; padding: 5px;"; 
    boxText.innerHTML = marker.html; 

    var myOptions = { 
      content: boxText 
      ,disableAutoPan: false 
      ,maxWidth: 0 
      ,pixelOffset: new google.maps.Size(-140, 0) 
      ,zIndex: null 
      ,boxStyle: { 
       background: "url('http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.12/examples/tipbox.gif') no-repeat" 
       ,opacity: 0.75 
       ,width: "280px" 
      } 
      ,closeBoxMargin: "10px 2px 2px 2px" 
      ,closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif" 
      ,infoBoxClearance: new google.maps.Size(1, 1) 
      ,isHidden: false 
      ,pane: "floatPane" 
      ,enableEventPropagation: false 
    }; 
    // end example code for custom infobox 

    google.maps.event.addListener(marker, "click", function (e) { 
    ib.close(); 
    ib.setOptions(myOptions); 
    ib.open(map, this); 
    }); 
    return marker; 
} 

function setMarkers(map, markers) { 

for (var i = 0; i < markers.length; i++) { 
    createMarker(markers[i], map); 
} 
} 

working example with all the points from the live example

+0

作品魅力谢谢! – egr103 2013-03-03 10:08:48

+0

虽然现在当我添加更多具有不同内容的位置时,我也更改了事件侦听器:google.maps.event。addListener(标记,“点击”,功能(e){//添加此额外行来调用每个标记内容,但现在信息框中的样式不起作用???? ib.setContent(this.html); ib.open(map,this); });.信息框有效,但没有造型?完整的JS在这里:http://pastebin.com/Pd15Src5 – egr103 2013-03-03 10:25:54

+0

或检查现场示例:http://visualartscambridge.org/home/地图是在底部。单击标记,不会显示任何样式,只是内容... – egr103 2013-03-03 10:31:42

1

请确保有属性的HTML或没有。因为它当时指的是标记。

google.maps.event.addListener(marker, "click", function() 
{ 

    infowindow.setContent(this.html); 
    // Call myOptions when marker is clicked and opened 
    infowindow.open(map, myOptions, this); 
}); 

也试着限制你的全局变量。请尝试一次这个Fiddle

+0

'this'指的是标记,而不是地图 – 2013-03-01 20:44:54

+0

你是对的我做了这个改变。非常感谢您指出这一点。 – nicholasnet 2013-03-04 16:19:07

0

好吧,从http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.9/获取inbox.js文件包含在您的html/jsp中。你需要从你的代码太

删除信息窗口对象,并使用

function setMarkers(map, markers) { 
    ......// same as your code 
    var ib = new InfoBox(myOptions); 
    google.maps.event.addListener(marker, "click", function (e) { 
     ib.open(map, this); 
    }); 
    .....//same as your code 
} 

修改代码。如果你不会成功首次超过我们可能需要尝试几次。请每次发布修改过的代码和结果。