Javascript CSS谷歌地图自定义信息窗口
我一直在使用来自的代码,这是目前谷歌在地图API v3中创建自定义信息窗口的最佳示例。我一直在努力,到目前为止,我已经让它接近工作,除了一件事,它的div容器文本内容不会扩展到适合的内容,所以它只是下降,而不是扩大泡沫。如果我给内容容器一个固定的像素宽度,它可以正常工作,但是我不能让它根据其中的文本量来扩展 这件事我已经讨论了一段时间了。任何帮助都将不胜感激 这是HTML页面Javascript CSS谷歌地图自定义信息窗口,javascript,css,google-maps,Javascript,Css,Google Maps,我一直在使用来自的代码,这是目前谷歌在地图API v3中创建自定义信息窗口的最佳示例。我一直在努力,到目前为止,我已经让它接近工作,除了一件事,它的div容器文本内容不会扩展到适合的内容,所以它只是下降,而不是扩大泡沫。如果我给内容容器一个固定的像素宽度,它可以正常工作,但是我不能让它根据其中的文本量来扩展 这件事我已经讨论了一段时间了。任何帮助都将不胜感激 这是HTML页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Gayborhood Map Test</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map_canvas { width: 900px;
height: 400px;
margin: 200px auto 0 auto; }
</style>
<link rel="stylesheet" type="text/css" href="map.css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="InfoBox.js"></script>
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(39.947137,-75.161824);
var myOptions = {
zoom: 16,
center: latlng,
mapTypeId: google.maps.MapTypeId.HYBRID
};
var gayborhood;
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
var gayborhoodcoords = [
new google.maps.LatLng(39.9492017, -75.1631272),
new google.maps.LatLng(39.945423, -75.1639561),
new google.maps.LatLng(39.9450064, -75.160579),
new google.maps.LatLng(39.9487765, -75.1597468),
new google.maps.LatLng(39.9492017, -75.1631272)
];
gayborhood = new google.maps.Polygon({
paths: gayborhoodcoords,
strokeColor: "#00ff00",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#00ff00",
fillOpacity: 0.35
});
gayborhood.setMap(map);
var image = 'red_icon.png';
var myLatLng = new google.maps.LatLng(39.948883,-75.162246);
var redMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image
});
var contentString = '<h4>Woody\'s Bar</h4>';
/*var infowindow = new google.maps.InfoWindow({
content: contentString,
disableAutoPan: true
});*/
google.maps.event.addListener(redMarker, 'mouseover', function() {
var infoBox = new InfoBox({marker: redMarker, map: map});
});
/*google.maps.event.addListener(redMarker, 'mouseout', function() {
infowindow.close();
});*/
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas"></div>
</body>
</html>
谢谢 我也面临同样的问题。对我来说,有效的方法是动态确定内容的维度,并正确设置信息框的高度和宽度。我遇到的问题是,在将内容插入DOM之前,它没有(正确的)维度值。因此,我的方法如下:
var temp = $("<div class='temp'></div>").html(content).hide().appendTo("body");
var dimentions = {
width : temp.outerWidth(true),
height : temp.outerHeight(true)
};
temp.remove();
var overlayProjection = this.getProjection();
var top_left = overlayProjection.fromLatLngToDivPixel(this.point_);
var dimensions= $.extend({}, dimensions, {
y : top_left.y - dimensions.height,
x : top_left.x - dimensions.width/2
});
var div = this.div_;
$(div).css({
"top": dimensions.y + 'px',
"left" : dimensions.x + 'px',
"width" : dimensions.width + 'px',
"height" : dimensions.height + 'px'
}).html(content);
var temp=$(“”).html(content.hide().appendTo(“body”);
变量维度={
宽度:室外温度宽度(真实值),
高度:温度外光(真)
};
移除温度();
var overlyprojection=this.getProjection();
var top_left=从LatlngToDivPixel(该点)的过度投影;
变量维度=$。扩展({},维度{
y:左上角。y-尺寸。高度,
x:左上角.x-尺寸.width/2
});
var div=this.div_2;;
$(div).css({
“顶部”:尺寸y+px,
“左”:尺寸.x+‘px’,
“宽度”:尺寸。宽度+px,
“高度”:尺寸。高度+px
}).html(内容);
希望有帮助 您可以覆盖“信息框绘制”方法,并在渲染后重新定位信息框:
var infobox = new InfoBox(myOptions);
infobox.initReady = false;
var oldDraw = infobox.draw;
infobox.draw = function() {
oldDraw.apply(this);
if( ! infobox.initReady) {
// Calculate the required offset
var offsetY = -($(infobox.div_).outerHeight());
var offsetX = -110;
infobox.initReady = true;
// Set the new pixelOffset
infobox.setOptions({
pixelOffset: new google.maps.Size(offsetX, offsetY)
});
}
}
与此处讨论的问题非常相似:
var temp = $("<div class='temp'></div>").html(content).hide().appendTo("body");
var dimentions = {
width : temp.outerWidth(true),
height : temp.outerHeight(true)
};
temp.remove();
var overlayProjection = this.getProjection();
var top_left = overlayProjection.fromLatLngToDivPixel(this.point_);
var dimensions= $.extend({}, dimensions, {
y : top_left.y - dimensions.height,
x : top_left.x - dimensions.width/2
});
var div = this.div_;
$(div).css({
"top": dimensions.y + 'px',
"left" : dimensions.x + 'px',
"width" : dimensions.width + 'px',
"height" : dimensions.height + 'px'
}).html(content);
var infobox = new InfoBox(myOptions);
infobox.initReady = false;
var oldDraw = infobox.draw;
infobox.draw = function() {
oldDraw.apply(this);
if( ! infobox.initReady) {
// Calculate the required offset
var offsetY = -($(infobox.div_).outerHeight());
var offsetX = -110;
infobox.initReady = true;
// Set the new pixelOffset
infobox.setOptions({
pixelOffset: new google.maps.Size(offsetX, offsetY)
});
}
}