Странный вопрос, я думаю, но у меня есть этот фрагмент кода на моей странице...
$(".map-overlay-left").click(function () {
$("#map-holder").hide('slow');
var gmarkers = [];
var side_bar_html = "";
var map = new GMap2(document.getElementById('map-holder'));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
var Africa = new GLatLng(-2.767478,23.730469);
map.setCenter(Africa, 4);
$.get("http://xx.xxx.xxxx.xxx/xml-feed-google-maps",{},function(xml) {
$('marker',xml).each(function(i) {
html = $(this).text();
lat = $(this).attr("lat");
lng = $(this).attr("lng");
label = $(this).attr("label");
var point = new GLatLng(lat,lng);
var marker = createMarker(point,label,html);
map.addOverlay(marker);
});
});
$("#map-holder").show('slow');
});
Это работает фантастически и делает то, что я хочу, функционально, но не с точки зрения пользовательского интерфейса. Сначала нужно сделать приятный переход, чтобы скрыть div «держатель карты», отобразить карту Google внутри него, а затем сделать хороший переход обратно к размеру. Переход — это отображение/скрытие JQuery по умолчанию.
Теперь проблема, которую я, кажется, получаю, заключается в том, что карта Google отображается, пока этот $("#map-holder").hide('slow');
все еще работает, и вы видите проблески карты, прежде чем она скроется, а затем снова откроется, что как бы бросает вызов всему эффекту.
Таким образом, кто-нибудь знает, как я могу замедлить код, чтобы дождаться завершения функции скрытия, прежде чем делать все остальное? (в идеале я не хочу использовать что-то жестко запрограммированное, например setTimeout).
Заранее спасибо!
Шади
ОБНОВЛЕНИЕ 1
Я вызываю функцию скрытия, но это очень странно влияет на GMap. В Chrome/FF/Safari он отображает только небольшой сегмент в углу карты, когда он появляется. а в ИЕ вообще скидывается и центрируется в другом месте. GMap, похоже, не любит отображаться в скрытом div.
Вы можете увидеть это здесь http://afid.staging.dante-studios.com/ это на передней панели (просто нажмите кнопку воспроизведения в Азии или Африке, чтобы увидеть странный эффект).
Любые идеи о том, как решить эту проблему?
ОБНОВЛЕНИЕ 2. Попытка исправить проблему неправильного отображения карты Google в скрытом div следующим образом:
$(".map-overlay-left").click(function () {
$("#map-holder").hide('slow', function(){
var gmarkers = [];
var side_bar_html = "";
var map = new GMap2(document.getElementById('map-holder'));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
var Africa = new GLatLng(-2.767478,23.730469);
map.setCenter(Africa, 4);
$.get("http://afid.staging.dante-studios.com/xml-feed-google-maps",{},function(xml) {
$('marker',xml).each(function(i) {
html = $(this).text();
lat = $(this).attr("lat");
lng = $(this).attr("lng");
label = $(this).attr("label");
var point = new GLatLng(lat,lng);
var marker = createMarker(point,label,html);
map.addOverlay(marker);
});
});
});
$("#map-holder").show('slow');
map.checkResize();
map.setCenter(Africa, 4);
});
Но увы не повезло с методом map.checkResize();
. Есть идеи?