我遇到的问题是初始化Google maps api。当我将map api放在一个设置为显示的普通div中时,它可以正常工作并上下切换,但是当我将显示设置为none时,它无法正确加载。地图仅加载一半,并且不显示图钉图像。是否有解决方法,或者这在最初未显示的切换幻灯片中不起作用。
我创建的示例页面如下所示。
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type='text/javascript' src='scripts/jscripts/jquery-1.4.js'></script>
<style type="text/css">
.slideTogglebox{
float:left;
padding:8px;
margin:16px;
border:1px solid red;
width:500px;
height:350px;
background-color:#000000;
color:white;
display:none;
}
.clear{
clear:both;
}
</style>
</head>
<body>
<?php
$url ="http://maps.googleapis.com/maps/api/geocode/xml?address=PL329YN&sensor=false";
$getAddress = simplexml_load_file($url);
$lat = $getAddress->result->geometry->location->lat;
$lng = $getAddress->result->geometry->location->lng;
?>
<div class="clear">
<h3>slideToggle() example</h3> <a href="javascript:slideToggle()" id=slideToggle>Click Me</a>
<br/>
<div class="slideTogglebox" id='map_canvas'>
</div>
</div>
<script type="text/javascript">
function initialize() {
<?php
print "var lat = $lat;";
print "var lng = $lng;";
?>
var latlng = new google.maps.LatLng(lat, lng);
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var image = 'images/map/pin_green.png';
var myLatLng = new google.maps.LatLng(lat, lng);
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image
});
}
var init = false;
$("#slideToggle").click(function () {
if (!init) {
initialize();
init = true;
}
$('.slideTogglebox').slideToggle('slow');
});
</script>
答案 0 :(得分:0)
它似乎答案可能很简单。仅当包含地图的div可见时才初始化地图。如果div可见并且没有地图,则将回调放入.slideToggle()
调用检查e。如果是这样,请加载地图(您可能还希望在加载地图时禁用单击事件操作)。您也可以考虑将map_canvas设为slideToggleBox的子项(而不是slideToggleBox本身),以防影响地图的反应等。
BTW,当你已经通过jQuery添加点击事件时,<a href="javascript:slideToggle()" ... >
有什么用?
答案 1 :(得分:0)
新的v3 api和jquery似乎存在问题。它似乎与谷歌地图api的v2一起使用没有问题。
因此,为了解决这个问题,我在div切换之后调用了初始化函数。然后我在CSS中设置了背景以匹配页面上的背景,以便在切换后它显示为淡入淡出。
<script type="text/javascript">
$("#slideToggle").click(function () {
$('.slideTogglebox').slideToggle(function initialize() {
<?php
print "var lat = $lat;";
print "var lng = $lng;";
?>
var latlng = new google.maps.LatLng(lat, lng);
var myOptions = {
zoom: 10,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var image = 'images/map/pin_green.png';
var myLatLng = new google.maps.LatLng(lat, lng);
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image
});
});
});
</script>
答案 2 :(得分:0)
您也可以在不使用js中的额外回调的情况下为css(不透明度,高度)设置动画。奇迹般有效。只要显示包含地图的div,就可以使用此方法。