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');
}
Ответы
Ответ 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);
поэтому, если у вас есть эта проблема, поставьте ее прямо под тем, где вы создаете свою карту тоже!
Ответ 4
Карты Google плохо работают с Bootstrap. Попробуйте добавить следующий CSS к вашему элементу карты
#map-canvas img {
max-width: none;
}
Twitter Загрузочный CSS-код, влияющий на Карты Google
Ответ 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() {
инициализации();
});