Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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_Google Maps Api 3 - Fatal编程技术网

Javascript 信息框上的边界检测,因此它们不会';不要从地图上画下来

Javascript 信息框上的边界检测,因此它们不会';不要从地图上画下来,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,重新计算信息框位置的最佳方法是什么?它总是试图在地图内完全绘制,但不移动地图 因此,如果我试图打开一个靠近窗口右边缘的信息框,它应该将信息框绘制到标记的左侧,而不是它的顶部,或者它的左侧 有没有一个框架 谢谢 每个请求的My infobox选项 var myOptions = { content: this.bigInfo(variables) ,disableAutoPan: false ,maxWidt

重新计算信息框位置的最佳方法是什么?它总是试图在地图内完全绘制,但不移动地图

因此,如果我试图打开一个靠近窗口右边缘的信息框,它应该将信息框绘制到标记的左侧,而不是它的顶部,或者它的左侧

有没有一个框架

谢谢

每个请求的My infobox选项

        var myOptions = {
             content: this.bigInfo(variables)
            ,disableAutoPan: false
            ,maxWidth: 0
            ,pixelOffset: new google.maps.Size(20, -60)
            ,zIndex: 9
            ,boxClass: "bigInfo"
            ,closeBoxMargin: "-9px -9px 3px 3px"
            ,closeBoxURL: "./img/close.png"
            ,infoBoxClearance: new google.maps.Size(100,100)
            ,isHidden: false
            ,pane: "floatPane"
            ,enableEventPropagation: false
    };

我发现这个例子符合你的要求


有一个代码示例,它与您使用
信息窗口所描述的一样。举个例子,你应该能够从正确的方向开始。

我对信息框有一个窍门。它依赖于从LatlngToContainerPixel到屏幕像素的转换,我在另一个问题中找到了。谷歌文档的描述告诉我们像素的位置是在“地图的外容器”中测量的。然而,回答者警告说,它的同级函数,
来自latlngtodivpixel
。不可靠,因为它会随着调整大小或缩放而冻结

因此,我的代码使用latlngtocontainerPixel的
。如果您尝试使用“我的代码”,请在代码中进行调整,看看是否需要更改偏移量。在我的代码中,我有一个固定的信息框宽度86px

单击中心,然后单击可见区域的边。地图不会移动

以下是JSFIDLE:


html,正文{margin:0;padding:0;height:100%}
#地图画布{宽度:100%;高度:300px}
#容器{填充:10px;}
var映射;
变量映射选项={
中心:新google.maps.LatLng(40.0,-88.0),
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var计数=0;
函数初始化(){
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
overlay=新的google.maps.OverlayView();
overlay.draw=函数(){};
覆盖.setMap(map);
google.maps.event.addListener(映射,'click',函数(事件){
计数+=1;
pt=overlay.getProjection().fromLatLngToContainerPixel(event.latLng);
document.getElementById(“end”).value=pt;
addMarker(event.latLng,“index#”+Math.pow(100,count),pt.x,pt.y);
});
}
功能添加标记(位置、内容、x、y){
var marker=new google.maps.marker({
地图:地图,
职位:pos
});
marker.setTitle(内容);
var labelText=内容;
变量myOptions={
内容:labelText
,箱式:{
边框:“1px纯黑”
,背景:“白色”
,textAlign:“居中”
,字体大小:“8pt”
,宽度:“86px”//必须手动设置
,不透明度:1.0
,zIndex:-100
}
,disableAutoPan:是的
,位置:marker.getPosition()
,closeBoxURL:“
,窗格:“浮动窗格”
,enableEventPropagation:true
,zIndex:-1
};
offX=-43;
offY=0;
//比较边界
如果(x>$(“#地图_画布”).width()-60{
offX=-86;
} 
如果(x<60){
offX=0;
} 
如果(y>$(“#地图_画布”).height()-60{
offY=-50;
} 
myOptions.pixelOffset=新的google.maps.Size(offX,offY);
var ibLabel=新信息框(myOptions);
ibLabel.setZIndex(-1);
ibLabel.open(map);
var infowindow=new google.maps.infowindow({
内容:内容
});
google.maps.event.addListener(标记“click”,函数(event){
打开(地图,这个);
ibLabel.setZIndex(-1);
这是setZIndex(1);
});
}
google.maps.event.addDomListener(窗口“加载”,初始化);
完:

我也遇到了这个问题,我的解决方案是使用panBy

map.panBy(0, -100);    // panning to show full infobox    (xoffset,yoffset)

你能显示你的信息框选项代码吗?我不想再打扰你了,但是你到底是如何在屏幕上显示完成的信息框的呢?我特别感兴趣的是如何设置宽度和位置。它们修好了吗?取决于文本长度?我使用上面的选项,只得到一个透明的字段,带有我的静态文本。它们是固定的,但我在css类中进行了固定。你比我强多了!但我的描述好一点-谢谢,这看起来像我需要的!
map.panBy(0, -100);    // panning to show full infobox    (xoffset,yoffset)