Bagaimana cara mengubah ukuran Google Map dengan JavaScript setelah dimuat?

105

Saya memiliki div 'mapwrap' disetel ke 400px x 400px dan di dalamnya saya memiliki 'peta' Google disetel ke 100% x 100%. Jadi peta dimuat pada 400 x 400px, kemudian dengan JavaScript saya mengubah ukuran 'mapwrap' menjadi 100% x 100% layar - peta google mengubah ukuran ke seluruh layar seperti yang saya harapkan tetapi ubin mulai menghilang sebelum tepi kanan halaman.

Apakah ada fungsi sederhana yang dapat saya panggil agar peta Google menyesuaikan kembali ke div 'mapwrap' berukuran lebih besar?

Matthew James Taylor
sumber

Jawaban:

28

Jika Anda menggunakan Google Maps v2, panggil checkResize()peta Anda setelah mengubah ukuran penampung. tautan

MEMPERBARUI

Google Maps JavaScript API v2 sudah tidak digunakan lagi pada tahun 2011. Sudah tidak tersedia lagi.

SingleNegationElimination
sumber
323

untuk Google Maps v3, Anda perlu memicu acara pengubahan ukuran secara berbeda:

google.maps.event.trigger(map, "resize");

Lihat dokumentasi acara pengubahan ukuran (Anda harus mencari kata 'resize'): http://code.google.com/apis/maps/documentation/v3/reference.html#event


Memperbarui

Jawaban ini sudah ada sejak lama, jadi sedikit demo mungkin bermanfaat & meskipun menggunakan jQuery, tidak perlu melakukannya.

$(function() {
  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644)
  };
  var map = new google.maps.Map($("#map-canvas")[0], mapOptions);

  // listen for the window resize event & trigger Google Maps to update too
  $(window).resize(function() {
    // (the 'map' here is the result of the created 'var map = ...' above)
    google.maps.event.trigger(map, "resize");
  });
});
html,
body {
  height: 100%;
}
#map-canvas {
  min-width: 200px;
  width: 50%;
  min-height: 200px;
  height: 80%;
  border: 1px solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&dummy=.js"></script>
Google Maps resize demo
<div id="map-canvas"></div>

UPDATE 2018-05-22

Dengan rilis perender baru di Maps JavaScript API versi 3.32, peristiwa pengubahan ukuran tidak lagi menjadi bagian dari Mapkelas.

Dokumentasi menyatakan

Saat peta diubah ukurannya, pusat peta diperbaiki

  • Kontrol layar penuh sekarang mempertahankan pusat.

  • Tidak perlu lagi memicu peristiwa pengubahan ukuran secara manual.

sumber: https://developers.google.com/maps/documentation/javascript/new-renderer

google.maps.event.trigger(map, "resize"); tidak berpengaruh apa pun mulai dari versi 3.32

cmroanirgo.dll
sumber
2
Bagi siapa pun yang menggunakan goMap, ingatlah bahwa objek peta google tersedia di $ .goMap.map
Adam Caviness
1
Lihat jawaban oleh Andrew Hedges ini untuk cara mengimplementasikan:
CrazyTim
Peta tidak akan berubah ukurannya setelah memanggil ini, sampai saya membungkusnya dengan setTimeout. Saya menemukan solusi itu di sini (lihat komentar # 46).
Tyler Collier
Jawaban ini harus dipilih mengingat v2 sekarang sudah tidak digunakan lagi. @Tyler Collier, pemicu peristiwa ini adalah untuk memberi tahu peta bahwa ia harus mengecat ulang dirinya sendiri. Mungkin saja Anda mengubah ukuran penampung tersembunyi, dalam hal ini, ya, zoom out dan in akan berfungsi dalam waktu tunggu.
Schien
8

Jawaban populer google.maps.event.trigger(map, "resize");tidak bekerja untuk saya sendiri.

Ini adalah trik yang memastikan bahwa halaman telah dimuat dan peta juga telah dimuat. Dengan menyetel listener dan mendengarkan status diam peta, Anda kemudian dapat memanggil pemicu peristiwa untuk mengubah ukuran.

$(document).ready(function() {
    google.maps.event.addListener(map, "idle", function(){
        google.maps.event.trigger(map, 'resize'); 
    });
}); 

Ini adalah jawaban saya yang berhasil untuk saya.

italiansoda
sumber
2

Penawaran peta dalam kotak Wolfgang Pichler untuk

Muat peta dalam elemen div yang bisa diseret dan diubah ukurannya.

Gilles 'SO- berhenti menjadi jahat'
sumber
1
Sepertinya ini untuk peta v2. Poster asli menanyakan tentang peta v3. Kedua API tersebut tampaknya tidak kompatibel.
JoshuaD
Tautan itu memicu ancaman terdeteksi.
ke dalam
1

Ini yang terbaik adalah melakukan Pekerjaan selesai. Ini akan mengubah ukuran Peta Anda. Tidak perlu memeriksa elemen lagi untuk mengubah ukuran Peta Anda. Apa yang dilakukannya secara otomatis akan memicu peristiwa ukuran ulang.

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

        map_array[Next].setZoom( map.getZoom() - 1 );
    map_array[Next].setZoom( map.getZoom() + 1 );
Divyanshu Rawat
sumber
0

Pertama-tama, terima kasih telah membimbing saya dan menutup masalah ini. Saya menemukan cara untuk memperbaiki masalah ini dari diskusi Anda. Ya, mari kita langsung ke intinya. Masalahnya saya Menggunakan helper GoogleMapHelper v3 di CakePHP3. Ketika saya mencoba membuka popup modal bootstrap, saya terpukul dengan masalah kotak abu-abu di atas peta. Sudah diperpanjang selama 2 hari. Akhirnya saya bisa memperbaikinya.

Kami perlu Memperbarui GoogleMapHelper untuk memperbaiki masalah

Perlu menambahkan skrip di bawah ini dalam fungsi setCenterMap

google.maps.event.trigger({$id}, \"resize\");

Dan perlu menyertakan kode di bawah ini dalam JavaScript

google.maps.event.addListenerOnce({$id}, 'idle', function(){
   setCenterMap(new google.maps.LatLng({$this->defaultLatitude}, 
   {$this->defaultLongitude}));
});
pengguna1933951
sumber