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

Google Maps v3 частично загружается в верхнем левом углу, событие изменения размера не работает

Карты Google V3 загружены частично в верхнем левом углу. Я пробовал следующие методы:

  • Добавьте google.maps.event.trigger(map, 'resize'); после инициализации карты.

  • Переупорядочить тег <script> в индексном файле

Но никто не работает для меня. Как решить эту проблему. Есть ли официальная ошибка и решение этой проблемы?

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Bootstrap, from LayoutIt!</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">

    <!-- Bootstrap css files -->
    <link href="stylesheets/bootstrap.min.css" rel="stylesheet">
    <link href="stylesheets/bootstrap-responsive.min.css" rel="stylesheet">
    <link href="stylesheets/style.css" rel="stylesheet">
  </head>
  <body>
    <div id="contentbar">
      <div id="dashboard-content" class="contentbar-main">
        Some Content
      </div>
      <div id="summary-content" class="contentbar-main" style="display:none;">
        <div class="container-fluid">
          <div class="row-fluid">
            <div class="span12">
              <div class="row-fluid">
                <div class="span7" id="sidebarid">
                  <p>Responsive web design is an approach, I often call it a mindset, because you have to change the way you think when you're going responsive. The basic idea behind it is: one design to rule them all - no m.domain.com, no touch.domain.com, no 3 separate CSS files, no 7 PSD files for each device or each orientation - just "domain.com" looking the same on desktop, tablet and phone.</p>
                </div>
                <div class="span5" id="contentbarid">
                  <div class="row-fluid">
                    <div class="span12">
                      <input type="button" value="toggle" id="toggle-button">
                      <div id="map-canvas" style="width:100%;height:400px;"></div>
                    </div>
                  </div>
                  <div class="row-fluid">
                    <div class="span12">
                      <p>Responsive web design is an approach, I often call it a mindset, because you have to change the way you think when you're going responsive. The basic idea behind it is: one design to rule them all - no m.domain.com, no touch.domain.com, no 3 separate CSS files, no 7 PSD files for each device or each orientation - just "domain.com" looking the same on desktop, tablet and phone.</p>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- jQuery scripts -->
      <script type="text/javascript" src="javascripts/jquery.min.js"></script>
      <!-- Bootstrap script -->
      <script type="text/javascript" src="javascripts/bootstrap.min.js"></script>
      <!-- My basic script file-->
      <script type="text/javascript" src="javascripts/my-script.js"></script>
      <!--Google Map server url-->
      <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAngjBDpe4ep15u5dvlnbZbn1ghA5uISZY&sensor=false"></script>
    </body>
  </html>

my- script.js

var map;
$(document).ready(function(){
  google.maps.visualRefresh = true;
    initializeMap();
});

//Load Map in Summary Tab
function initializeMap() {
  var mapOptions = {
    center: new google.maps.LatLng(-34.397, 150.644),
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
  google.maps.event.trigger(map, 'resize');
}
4b9b3361

Ответ 1

У меня тоже была эта проблема, и я исправил ее, ожидая состояния "бездействия" карты (т.е. после ее завершения), а затем вызывая изменение размера:

google.maps.event.addListenerOnce(map, 'idle', function() {
   google.maps.event.trigger(map, 'resize');
});

Ответ 2

Я думаю, что ваша карта скрыта во время ее создания: там display:none на div #summary-content, что карта вложена внутри.

Вам следует попробовать запустить событие resize после того, как div станет видимым вместо инициализации.

Фактически, вы могли бы просто вызвать свое событие функции initializeMap() в то время, когда div станет видимым, а не вызвать его в вашей функции .ready().

Ответ 3

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

Некоторое время царапал мне голову, но мне удалось решить ее:

google.maps.event.addListenerOnce(map, 'idle', function() {
       google.maps.event.trigger(map, 'resize');
       map.setCenter(latLng);
    });

Это было простое решение благодаря Яну Девлину и д.раеву и просто хотел поблагодарить и поделиться кодом, который решил его для меня, потому что я не могу комментировать или голосовать до сих пор!

Я назвал это после создания карты с помощью:

map = new google.maps.Map(document.getElementById("business-location-"+business_username), map_options);

поэтому, если у вас есть эта проблема, поставьте ее прямо под тем, где вы создаете свою карту тоже!

Ответ 5

У меня появилась аналогичная проблема (карта, загруженная в контейнер, расширенная анимацией)

Как @Ian Devlin часть решения, это запустить событие resize, когда все будет видно.
Вторая часть - зафиксировать центр (как правило, в верхнем левом углу):

google.maps.event.addListenerOnce(map, 'idle', function() {
   google.maps.event.trigger(map, 'resize');
   map.setCenter(center); // var center = new google.maps.LatLng(50,3,10.9);
});

Ответ 6

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

Функция API Карт Google - initialise();

var locationLondon = new google.maps.LatLng(51.508742, -0.120850);
var map;    

    function initialise(location){
        //Object to define properties
        var mapProp = {
            center: locationLondon,
            zoom: 15,
            disableDefaultUI:true,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);

        //Map Marker
        var marker = new google.maps.Marker({
            position: locationLondon,
            map: map
        });

        marker.setMap(map);
    };

Мой вызов события jQuery

    $( document ).ready(function(){
        $( '#maps-container' ).hide();
        $( '#card-1 .fa-info-circle' ).click(function(event){
            event.stopPropagation();
            $( '#maps-container' ).delay( 1000 ).fadeIn( 'slow' );
            $( '#map-load' ).delay( 1000 ).fadeOut( 'slow' );
            setTimeout(initialise, 1000);
        });
    });
  • '# map-load' - это экран предварительного загрузчика для начальной загрузки карты.
  • '# maps-container' - это контейнер для Карты Google (#googleMap)

Ответ 7

Используйте событие showhow с указанным форматом. Это сработало для меня.

$(document).on('pageshow', '[data-role = "page" ] # mapPage', function() {
инициализации(); });