Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图:动态调整信息窗口大小_Javascript_Google Maps - Fatal编程技术网

Javascript 谷歌地图:动态调整信息窗口大小

Javascript 谷歌地图:动态调整信息窗口大小,javascript,google-maps,Javascript,Google Maps,打开信息窗口后,如何调整其大小?我在窗口中有一个超链接,它生成一个AJAX请求;在回调中,我想调整信息窗口的大小。无法设置信息窗口大小的动画,但有一个函数。文档中说,您可以将任何参数保留为null,但如果将“size”参数保留为null,则会出现错误。这意味着您必须指定信息窗口的大小 但是,由于这破坏了动态调整窗口大小的原始点,我强烈建议只需关闭原始信息窗口并创建一个新窗口-这就是重置功能将要执行的操作。查看以下内容。所发生的是,我创建了一个初始信息窗口,其中包含最小的 信息(请参阅getInf

打开信息窗口后,如何调整其大小?我在窗口中有一个超链接,它生成一个AJAX请求;在回调中,我想调整信息窗口的大小。

无法设置信息窗口大小的动画,但有一个函数。文档中说,您可以将任何参数保留为null,但如果将“size”参数保留为null,则会出现错误。这意味着您必须指定信息窗口的大小


但是,由于这破坏了动态调整窗口大小的原始点,我强烈建议只需关闭原始信息窗口并创建一个新窗口-这就是重置功能将要执行的操作。

查看以下内容。所发生的是,我创建了一个初始信息窗口,其中包含最小的 信息(请参阅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&amp;chs=24x32&amp;chco=FFFFFF,008CFF,000000&amp;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数据很短,我不确定您会想要它。