브라우저 크기 조정 (반응 형)의 중앙 Google지도 (V3)


124

내 페이지에 100 % 페이지 너비로 Google지도 (V3)가 있고 가운데에 마커가 하나 있습니다. 브라우저 창 너비의 크기를 조정할 때지도가 중앙 (반응 형)으로 유지되기를 원합니다. 이제지도는 페이지의 왼쪽에 유지되고 작아집니다.

업데이트 duncan 덕분에 설명 된대로 정확하게 작동하게되었습니다. 이것은 최종 코드입니다.

var center;
function calculateCenter() {
  center = map.getCenter();
}
google.maps.event.addDomListener(map, 'idle', function() {
  calculateCenter();
});
google.maps.event.addDomListener(window, 'resize', function() {
  map.setCenter(center);
});

1
잘 했어! 예, dom 리스너가 선택할 수 있도록 현재 중심 값을 전역 범위에 지속적으로 출력해야합니다
efwjames

이런 식으로 정상으로 가고 있다면 center글로벌 일 필요가 없습니다. 제공 center(및 calculateCenter)이와 동일한 범위에 있으면 map모든 것이 작동합니다. 물론, map글로벌 경우 에도 수정해야합니다. :)
Roamer-1888 2014 년

아마도 대부분의 사람들에게 분명하지만이 코드는지도가로드 된 후 제공되므로 적어도 windows.onload에 있어야합니다.
Victoria Ruiz

덕분에,이해야 기본 구글은 beaviours 매핑
Yukulélé

답변:


143

창 크기가 조정될 때 이벤트 리스너가 있어야합니다. 이것은 나를 위해 일했습니다 (초기화 기능에 넣으십시오).

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

이것은 완벽하게 작동합니다, 감사합니다! 하지만 누군가가지도를 이동 한 경우지도의 새로운 중심을 어떻게 얻습니까? getCenter () 함수를 찾았지만 제대로 작동하지 않습니다. map.setCenter (map.getCenter ()); 작동하지 않습니다.
Gregory Bolkenstijn

또 다른 이벤트 리스너를 원합니다. 맵 객체의 "center_changed"에 대해 생각합니다. 새 좌표로 전역 변수를 업데이트 한 다음 setCenter에서 사용할 수 있습니다.
duncan

1
나는 그것도 시도했다 : var center; google.maps.event.addListener(map, 'center_changed', function() { center = map.getCenter(); }); google.maps.event.addDomListener(window, 'resize', function() { map.setCenter(center); }); 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.
Gregory Bolkenstijn

대신 "bounds_changed"는 어떻습니까?
duncan

49
가장 쉬운 방법입니다 : hsmoore.com/blog/…
AO_

83

브라우저 크기 조정 이벤트를 감지하고 중심점을 유지하면서 Google지도의 크기를 조정합니다.

var map = ...; // your map initialisation code

google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center); 
});

다른 방법 (예 : jQuery-UI '크기 조정 가능'컨트롤 사용)을 통해 Google지도의 크기를 조정할 때 다른 이벤트 핸들러에서 동일한 코드를 사용할 수 있습니다.

출처 : http://hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/ 링크에 대한 @smftre의 크레딧 .

참고 :이 코드는 수락 된 답변에 대한 @smftre의 의견에 링크되었습니다. 받아 들여지는 답변보다 실제로 우수하기 때문에 자체 답변으로 추가 할 가치가 있다고 생각합니다. 중심점을 추적하기위한 전역 변수와 해당 변수를 업데이트하기위한 이벤트 핸들러가 필요하지 않습니다.


@William의 의견에 동의합니다.이 방법을 사용하면지도 크기를 조정할 때보다 정확한 중앙 위치가 표시됩니다.
tenthfloor

허용 대답은 제대로 작동하지 않는,이 트릭했다

이것이 가장 좋고 작동하는 솔루션입니다. 모든 크기 조정 창 이벤트에서 작동합니다. 다른 솔루션이 제대로 작동하지 않았습니다.
zdarsky.peter 2014 년

1
이것은 정말로 커뮤니티 위키로 게시되었을 것입니다.
gustavohenke 2015 년

작동하지만 더 이해하고 싶습니다. 정확히 무엇을 google.maps.event.trigger(map, "resize");합니까?
meduz '


0

html : 선택한 ID로 div 만들기

<div id="map"></div>

Node.js :지도를 만들고 방금 만든 div에 연결합니다.

var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 16,
    center: new google.maps.LatLng(-33.890542, 151.274856)
});

창 크기를 조정할 때 가운데

var center = map.getCenter();

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

0

위의 솔루션을 es6로 업데이트했습니다.

let center;
const addMapListener = google.maps.event.addDomListener;

addMapListener(map, 'idle', () => center = map.getCenter());
addMapListener(window, 'resize', () => map.setCenter(center));

DOM 요소 인, 및 그렇지 않은 addDomListener을 모두 사용하고 있습니다. 지도 객체는 또는 자체 이벤트 핸들러를 사용해야 합니다. windowmapgoogle.maps.event.addListenermap.addListener
duncan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.