Javascript 谷歌地图:动态调整信息窗口大小
打开信息窗口后,如何调整其大小?我在窗口中有一个超链接,它生成一个AJAX请求;在回调中,我想调整信息窗口的大小。无法设置信息窗口大小的动画,但有一个函数。文档中说,您可以将任何参数保留为null,但如果将“size”参数保留为null,则会出现错误。这意味着您必须指定信息窗口的大小Javascript 谷歌地图:动态调整信息窗口大小,javascript,google-maps,Javascript,Google Maps,打开信息窗口后,如何调整其大小?我在窗口中有一个超链接,它生成一个AJAX请求;在回调中,我想调整信息窗口的大小。无法设置信息窗口大小的动画,但有一个函数。文档中说,您可以将任何参数保留为null,但如果将“size”参数保留为null,则会出现错误。这意味着您必须指定信息窗口的大小 但是,由于这破坏了动态调整窗口大小的原始点,我强烈建议只需关闭原始信息窗口并创建一个新窗口-这就是重置功能将要执行的操作。查看以下内容。所发生的是,我创建了一个初始信息窗口,其中包含最小的 信息(请参阅getInf
但是,由于这破坏了动态调整窗口大小的原始点,我强烈建议只需关闭原始信息窗口并创建一个新窗口-这就是重置功能将要执行的操作。查看以下内容。所发生的是,我创建了一个初始信息窗口,其中包含最小的 信息(请参阅getInfoWindowHtml)。gmap.openInfoWindowHtml调用提供了一个回调,在infowindow打开后调用该回调。在该回调中,进行ajax调用并重置窗口内容。但有两个问题: 我无法根据返回的内容精确调整窗口大小,因此我只使用了标准大小(请参见markerClickFn返回的匿名函数中的新GSize(300150))
function markerClickFn(venue, latlng) {
return function() {
var title = venue.Name;
var infoHtml = getInfoWindowHtml(venue);
// need to zoom in
gmap.setZoom(13);
gmap.openInfoWindowHtml(latlng, infoHtml,
{
onOpenFn: function() {
var iw = gmap.getInfoWindow();
iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 150), null, null);
$("#info-" + venue.Id.toString()).load("/Venue/MapInfoWindow/" + venue.Id);
}
}
);
};
}
function getSidebarHtml(venue) {
var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow
var html = "<li id='venue-" + venue.Id + "'>\n";
html = html + venue.Name + "\n";
//html = html + "<p class='description'>" + trunc(venue.Description, 200) + "</p>\n";
html = html + "</li>";
return html;
}
function getInfoWindowHtml(venue) {
var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow
var html = "<div id='info-" + venue.Id + "'><a href='" + url + "' class='url summary'>" + venue.Name + "</a></div>\n";
return html;
}
function addVenueMarker(venue) {
var icon = new GIcon(G_DEFAULT_ICON);
icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png";
var latLng = new GLatLng(venue.Lat, venue.Lng);
var marker = new GMarker(latLng, { icon: icon });
var fn = markerClickFn(venue, latLng);
GEvent.addListener(marker, "click", fn);
marker.event_ = venue;
marker.click_ = fn;
venue.marker_ = marker;
markers.push(marker);
return marker;
}
功能标记点击fn(场馆、停车场){
返回函数(){
var title=场馆名称;
var infoHtml=getInfoWindowHtml(场馆);
//需要放大吗
gmap.setZoom(13);
gmap.openInfoWindowHtml(latlng,infoHtml,
{
onOpenFn:function(){
var iw=gmap.getInfoWindow();
重置(iw.getPoint(),iw.getTabs(),新的GSize(300150),null,null);
$(“#info-”+venture.Id.toString()).load(“/venture/MapInfoWindow/”+venture.Id”);
}
}
);
};
}
功能getSidebarHtml(场馆){
var url=“/vention/Details/”+vention.Id;//实际上应该打开信息窗口
var html=“”+trunc(vention.description,200)+“\n”;
html=html+“ ”;
返回html;
}
功能getInfoWindowHtml(场馆){
var url=“/vention/Details/”+vention.Id;//实际上应该打开信息窗口
var html=“\n”;
返回html;
}
功能addVenueMarker(场馆){
var图标=新GIcon(G_默认图标);
icon.image=”http://chart.apis.google.com/chart?cht=mm&;chs=24x32&;chco=FFFFFF,008CFF,000000&;ext=.png”;
var latLng=新玻璃(VICENUE.Lat,VICENUE.Lng);
var marker=newgmarker(latLng,{icon:icon});
var fn=markerClickFn(场馆、停车场);
addListener(标记“单击”,fn);
marker.event=地点;
marker.click=fn;
地点标记u=标记;
标记器。推(标记器);
返回标记;
}
看起来我找到的动态调整InfoWindow大小的唯一解决方案是调用InfoWindow的setContent方法。您需要传入HTML节点或HTML字符串。这基本上会重新绘制信息窗口。它本质上是关闭当前的一个,然后打开一个新的。因此,在重新加载内容时会看到闪烁。这种很糟糕。谷歌似乎不赞成他们的v2 API,并且在新版本中很难做到这一点。我认为谷歌已经在硅谷的街对面雇佣了一群Sun Java开发人员,他们不知道如何像微软阵营那样提供简单易用的API。真令人沮丧 谢谢,两个答案都很有帮助。。然而,我最终使用了一个最大化窗口,它非常适合我的应用程序,我只是喜欢当它最大化时得到的动画;-)伟大的实际上,我考虑过推荐最大化的infoWindow,但如果ajax数据很短,我不确定您会想要它。