2011-12-14 15 views
1

私が抱えている問題は、Google maps apiの初期化です。マップを表示するように設定された通常のdiv内のマップapiが完全に動作し、上下に切り替わりますが、ディスプレイをnoneに設定すると正しくロードされません。地図は半分しかロードされず、ピン画像は表示されません。このために回避策がありますか、これは単に表示されていないトグルスライドでは機能しません。Google Maps APIとJQueryスライド地図が正しく初期化されないトグル

私が作成したページ例は以下の通りです。

<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

新しいv3 APIとjqueryに問題があるようです。それは問題のないGoogleマップ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> 
0

答えは簡単かもしれ思われます。マップを含むdivが表示されている場合にのみ、地図を初期化します。 divが表示され、マップがない場合は、.slideToggle()呼び出しチェックにコールバックを入れます。表示されている場合は、地図を読み込みます(地図の読み込み中にクリックイベントの操作を無効にすることもできます)。

ところで、あなたがすでにマップを追加しているときは、<a href="javascript:slideToggle()" ... >と一緒に何を持っているのですか?また、地図の反応などの効果に備えて、mapTextBoxの子にmap_canvasを追加することをお勧めします。 jQuery経由のイベントをクリックしますか?

0

jsで余分なコールバックを使用せずにCSS(不透明度、高さ)をアニメーションすることもできます。魅力のように動作します。ブロックを表示しているdivが表示されている限り、この方法で問題ありません。

関連する問題