Google Maps เป็นศูนย์กลาง (V3) ในการปรับขนาดเบราว์เซอร์ (ตอบสนอง)


124

ฉันมี Google Maps (V3) ในหน้าของฉันที่ความกว้าง 100% โดยมีเครื่องหมายหนึ่งตัวอยู่ตรงกลาง เมื่อฉันปรับขนาดความกว้างของหน้าต่างเบราว์เซอร์ฉันต้องการให้แผนที่อยู่ตรงกลาง (ตอบสนอง) ตอนนี้แผนที่จะอยู่ที่ด้านซ้ายของหน้าและเล็กลง

UPDATE ทำให้มันทำงานได้ตรงตามที่อธิบายไว้ด้วย 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

อาจจะเห็นได้ชัดสำหรับคนส่วนใหญ่ แต่รหัสนี้มาหลังจากโหลดแผนที่ดังนั้นอย่างน้อยก็ควรอยู่บน windows.onload
Victoria Ruiz

ขอบคุณนี่ควรเป็นเส้นทางเริ่มต้นของ Google Maps
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 Map ในขณะที่รักษาจุดกึ่งกลาง:

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); 
});

คุณสามารถใช้รหัสเดียวกันในตัวจัดการเหตุการณ์อื่น ๆ เมื่อปรับขนาดแผนที่ Google ด้วยวิธีอื่น (เช่นด้วยการควบคุม jQuery-UI 'ปรับขนาดได้')

ที่มา: http://hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/ให้เครดิต@smftreสำหรับลิงก์

หมายเหตุ: รหัสนี้เชื่อมโยงในความคิดเห็นของ @ smftre ในคำตอบที่ยอมรับ ฉันคิดว่ามันคุ้มค่าที่จะเพิ่มเป็นคำตอบของตัวเองเนื่องจากมันดีกว่าคำตอบที่ยอมรับจริงๆ ไม่จำเป็นต้องมีตัวแปรส่วนกลางเพื่อติดตามจุดศูนย์กลางและตัวจัดการเหตุการณ์เพื่ออัปเดตตัวแปรนั้น


เห็นด้วยกับ @William วิธีนี้ส่งผลให้ตำแหน่งตรงกลางแม่นยำยิ่งขึ้นเมื่อปรับขนาดแผนที่
ชั้น

คำตอบที่ได้รับการยอมรับทำงานไม่ถูกต้องอันนี้ใช้เคล็ดลับ
Tom

นี่คือทางออกที่ดีที่สุดและใช้ได้ผล ใช้ได้กับทุกเหตุการณ์ที่ปรับขนาด windows โซลูชันอื่น ๆ ทำงานไม่ถูกต้อง
zdarsky.peter

1
ควรโพสต์เป็นวิกิชุมชน
gustavohenke

มันใช้งานได้ แต่ฉันต้องการเข้าใจมากขึ้น ทำอะไรได้อย่างแม่นยำgoogle.maps.event.trigger(map, "resize");?
meduz '26


0

html: สร้าง div ด้วย id ที่คุณเลือก

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

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));

คุณกำลังใช้addDomListenerสำหรับทั้งสองwindowซึ่งเป็นองค์ประกอบ DOM และmapซึ่งไม่ใช่ วัตถุแผนที่ควรใช้google.maps.event.addListenerหรือตัวmap.addListenerจัดการเหตุการณ์ของตัวเอง
duncan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.