Подтвердить что ты не робот

Google Maps не центрируется, потому что div отображается: нет при загрузке страницы

У меня есть веб-страница, содержащая скрытый <div> с помощью display: none;, и у меня есть кнопка на странице, которая при нажатии изменит видимость <div> и наложит ее поверх всего остального (потому что он имеет набор z-индексов).

Внутри этого <div> у меня есть карта Google, встроенная с помощью iFrame с выводом Google Map, который был удален в месте, которое я пытаюсь показать своим пользователям.

Проблема

Поскольку iFrame Google Maps загружается при загрузке страницы, а при скрытии <div> это означает, что при отображении <div> карта Google не выравнивается должным образом (контакты и центральное расположение теперь находятся в верхний левый угол)

Решение, которое я ищу

Я знаю, что некоторые люди, вероятно, расскажут мне, как я должен "перекодировать всю мою страницу". То, что я действительно ищу, это некоторая функция onClick, которую я могу установить, которая перезагрузит iFrame, чтобы карта была правильно центрирована.

Что нужно знать

Этот iframe имеет страницу Карт Google в качестве своего src. то есть URL, а не ссылку на файл на моем сайте.

Любая помощь будет принята с благодарностью! Много кода, который я просматривал в сети, похоже, работает при обновлении определенного файла, на который ссылаются, а не на внешний URL.

Будет ли он работать, если я вставлял карту в другой файл HTML, а затем помещал этот HTML файл в качестве источника кадра?

4b9b3361

Ответ 1

У меня была эта аналогичная проблема, и я решил ее, изменив стиль css для div через jquery и изменив место, где я разместил iframe карты google.

Проблема

Код jquery:

<script type="text/javascript">    
$(function(){  
        $("#map_link").click(function(event) {  
            event.preventDefault();  
            $("#map").slideToggle();
        });  
    });
</script>

HTML: У меня была ссылка и карта google iframe, загруженная inline в div с дисплеем: none css style. Поскольку для отображения: none стиль делает ширину div: 0 и height: 0, адрес, запрошенный на карте google, не отображается должным образом.

<a id="map_link" href="#">See map.</a>
<div id="map" style="display:none">google_map_iframe_here</div>

Решение

Код jquery

<script type="text/javascript"> 
$(function() {
    $("#map_link").click(function(event) {  
        event.preventDefault();
        $("#map").slideToggle(); 
        $("#map").html('google_map_iframe_here').css('display','block');
        });  
});
</script>

HTML: div, в котором я раньше клал карту, пуст, потому что я загружаю карту только при нажатии на ссылку, и в этот момент я изменяю стиль css с дисплея: none для отображения: block, поэтому карта хорошо показывает.

<a id="map_link" href="#">See map.</a>
<div id="map" style="display:none"></div>

Надеюсь, это поможет! Хороший день кодирования!

Ответ 2

Я не pro, но я удалил onload = "initialize()" из тега body и изменил его на onclick = "initialize()" в кнопке, которая отображает div. Сейчас это работает.

Ответ 3

Я не использую iframe (я использую версию 3 API Карт Google), но у меня была такая же проблема "не выровнена правильно" из-за "скрытого" div. Мое исправление, а не использование display: none, которое полностью удалило его из DOM, я использовал видимость и высоту:

.myMapDiv {
    visibility: hidden;
    height: 0px;
}

Я считаю, что происходит потому, что "видимость: скрытая" на самом деле сохраняет элемент в DOM по-прежнему, карта может отображать по назначению. Я тестировал его в FF/Chrome/IE 7-9 и, кажется, работает до сих пор без проблем.

Ответ 4

После нескольких часов поиска в Интернете и получения результатов я решил попробовать то, что я вложил в качестве моей последней заметки на мой вопрос, и это сработало!

Я просто сделал второй файл с именем map.html и внутри кода был буквально:

<html>
<iframe> </iframe>   
</html>

с явно источником Google Maps, а затем на моей главной странице у меня был src для iframe, связанного с pages/map.html, а не с ссылкой в ​​Google Map.

Ответ 5

Вы можете просто обновить iframe следующим образом:

var myIframe = jQuery('#myIframe');
myIframe.attr('src',myIframe.attr('src')+'');

Ответ 6

вместо того, чтобы скрыть div с помощью display:none, используйте что-то вроде position: absolute; top: -9999px; left: -9999px

тогда, когда вы хотите показать контент для этого div, установите эти свойства в position: static; top: auto; left: auto или что-то вроде этого

Ответ 7

У меня была та же проблема, мое решение заключалось в том, чтобы установить div и iframe на высоту 0px, а затем изменить ее на желаемую высоту при переключении.

<script language="javascript"> 
function toggle() {
    var ele = document.getElementById("toggleText");
    var ifr = document.getElementById("iframe");
    var text = document.getElementById("displayText");
    if(ele.style.visibility == "visible") {
            ele.style.visibility = "hidden";
        ele.style.height = "0px";
        ifr.style.height = "0px";
        text.innerHTML = "<img src='#' border='0' width='180' height='65'>";
    }
    else {
        ele.style.visibility = "visible";
        ele.style.height = "420px";
        ifr.style.height = "420px";
        text.innerHTML = "<img src='#' border='0' width='180' height='65'>";
    }
} 
</script>

<div id="mb">
<a id="displayText" href="javascript:toggle();"><img src="#" border="0" width='180' height='65'></a>
</div>


<div id="toggleText"  style="visibility: hidden; height: 0px;">
<p><iframe id="iframe" style="height: 0px;" src=#" width="650">
</iframe></div>

Ответ 8

<script type="text/javascript">
$(document).ready(function (){$("#showMap").slideUp();})
</script>
<script type="text/javascript">
function showMap()
{
$("#showMap").slideToggle();
}
</script>
<a href="#mapa" onClick="showMap();">Show / Hide Map</a>
<div id="showMap" style="margin-left:15px; width:615px; height:400px;">
<?php require_once "map.php";?>
</div>

Ответ 9

Существует решение, использующее как css, так и jQuery. Сначала вам понадобится обертка div без высоты, которая будет включать iframe.

Таким образом, iframe будет нормально загружаться, не будучи видимым вообще. Затем, используя jQuery, вы можете отображать/скрывать iframe.

HTML

<div id="map-show">Show Map</div>
<div id="map-hide">Hide Map</div>

<div id="map-wrapper" style="height:0; overflow:hidden;">
    <div id="gmap">
        <iframe width="850" height="650" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="xxx"></iframe>
    </div>
</div>

CSS

.hidden {
    display: none;
}

JQuery

$(document).ready(function() {

$('#map-show').on('click',function(){

    // Remove class hidden from map - Display map
    $('#gmap').removeClass('hidden');

    // Set height to map container div - ONLY one time needed
    $('#map-wrapper').css('height', 'auto');
});

$('#map-hide').on('click',function(){

    // Add class hidden to map - Hide map
    $('#gmap').addClass('hidden');

});

});

Ответ 10

Вы можете использовать скрытую видимость и использовать jQuery для отображения и скрытия.

$('click-button').click(function(){
    var visibility = $("hidden-div").css("visibility");

    if (visibility == "hidden")
      $("hidden-div").css("visibility","visible");
    else
      $("hidden-div").css("visibility","hidden");
  });

Ответ 11

Вот решение, которое вообще не требует программирования!

При получении кода встраивания нажмите "настроить и просмотреть встроенную карту", ​​а затем просто перетащите карту вниз и вправо, чтобы нажимной контакт находился в нижнем правом углу, а затем захватил новый код для встраивания.

Когда центр карты находится в скрытом режиме, он все равно будет правильно отображаться при расширении. (не идеально, я знаю, но если все, что вам действительно нужно, это то, что нажимается на карте, полностью работает)

Ответ 12

Такая же проблема, простое решение.

css hidden оставить пробел в потоке html. Я не знаю, хорошо ли принята позиция css за пределами экрана на каждом устройстве и полностью блокируется блок. jquery отлично работает с шириной и высотой блока.

CSS

#map    {overflow:hidden; float:left;}

HTML:

<a href="#" id="btn_show">show</a>
<a href="#" id="btn_hide">hide</a>
<div id="map">
  <iframe width="100%" src="http://maps.google.com/maps f=q&source=s_q&hl=en&geocode=&ie=UTF8&iwloc=A&output=embed ...>
</div>

JavaScript:

var w=sames as gmap width;
var h=sames as gmap height;

$(document).ready(function(){
  $("#map").width(0);
  $("#map").height(0);

  $("#btn_show").click(function(){
    $("#map").show();
    $("#map").width(w);
    $("#map").height(h);
  });
  $("#btn_hide").click(function(){
    $("#map").hide();
  });
})

Ответ 13

Я тоже борюсь с чем-то подобным. Когда я изначально добавляю класс .hidden, который равен display: none;. Но когда я переключаю .hidden, карта не центрируется. Я обнаружил, что до тех пор, пока карта не будет полностью загружена, с помощью прослушивателя событий idle перед добавлением класса .hidden будут решены все проблемы с отображением.

google.maps.event.addListenerOnce(map, 'idle', function(){ // do something only the first time the map is loaded $mapContainer.addClass('hidden'); });

ссылка: Как проверить, полностью ли загружена Карт Google?

Ответ 14

Я обнаружил ту же проблему.

Решение

Использование iframe в качестве внешнего источника работает.

онлайн-демонстрация

http://jsbin.com/nogomi/1

Убедитесь, что атрибут iframe element name совпадает с атрибутом a element target

Вдохновленный https://developers.google.com/maps/documentation/javascript/

Ответ 15

в CSS:

#googleMap { visibility: hidden; }

Оригинал

beim Klick der die Karte öffnen soll jQuery:

ИЗМЕНИТЬ

jQuery, когда вы нажимаете, чтобы открыть карту:

$('#googleMap')
 .css('display','none')
 .css('visibility','visible')
 .fadeIn(500);
});