如何使用 settimeout 函数检查谷歌地图 API 是不是已完全加载?

Posted

技术标签:

【中文标题】如何使用 settimeout 函数检查谷歌地图 API 是不是已完全加载?【英文标题】:How to check google map API is fully loaded or not using setimeout function?如何使用 settimeout 函数检查谷歌地图 API 是否已完全加载? 【发布时间】:2020-10-13 18:20:36 【问题描述】:

首先我检查了没有 setTimeout 功能的谷歌地图 API 是否已完全加载或没有使用地图空闲功能。它工作正常。但我尝试在谷歌地图加载页面中使用 setTimeout 函数。地图加载成功。但地图空闲功能无法解决此问题。

代码.html

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Simple Markers</title>
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map 
        height: 100%;
      
      /* Optional: Makes the sample page fill the window. */
      html, body 
        height: 100%;
        margin: 0;
        padding: 0;
      
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
var map;
      function initMap() 
        var myLatLng = lat: -25.363, lng: 131.044;

        setTimeout(function()
          map = new google.maps.Map(document.getElementById('map'), 
          zoom: 4,
          center: myLatLng
        );
        ,2000);

        google.maps.event.addListenerOnce(map, 'idle', function()
          console.log('hi')
          var marker = new google.maps.Marker(
          position: myLatLng,
          map: map,
          title: 'Hello World!'
        );
        )

        // var map = new google.maps.Map(document.getElementById('map'), 
        //   zoom: 4,
        //   center: myLatLng
        // );

        // var marker = new google.maps.Marker(
        //   position: myLatLng,
        //   map: map,
        //   title: 'Hello World!'
        // );
      
    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=***********&callback=initMap">
    </script>
  </body>
</html>

如何实现这个场景。

【问题讨论】:

【参考方案1】:

您可以使用 Maps Javascript API Eventstilesloaded 事件。 tilesloaded 用于检测地图何时已完全加载。下面是使用您当前实现的示例 POC。

 var map;
  function initMap() 
    var myLatLng = lat: -25.363, lng: 131.044;
    map = new google.maps.Map(document.getElementById('map'), 
        zoom: 4,
        center: myLatLng
    );
    map.addListener('tilesloaded', function() 
        console.log('map is loaded');
    );        
    google.maps.event.addListenerOnce(map, 'idle', function()
        console.log('map is idle')
        var marker = new google.maps.Marker(
          position: myLatLng,
          map: map,
          title: 'Hello World!'
        ); 
    );     
  

如果这对您没有帮助,您还可以查看此 *** 问题 How can I check whether Google Maps is fully loaded? 的答案。看来很多用户之前也遇到过这个问题。

希望这些信息对您有所帮助,并祝您申请成功!

【讨论】:

【参考方案2】:

使用 titesloaded 事件监听地图加载完毕。

【讨论】:

以上是关于如何使用 settimeout 函数检查谷歌地图 API 是不是已完全加载?的主要内容,如果未能解决你的问题,请参考以下文章

如何:从谷歌地图上的 JSON 动态更新标记

检查谷歌地图中的位置变化

如何使用谷歌地图 Api 获得最精确的位置 [重复]

Android 谷歌地图我的位置权限

使用谷歌地图验证地址 - 检查地址

使用 php 将 iframe(谷歌地图)添加到 jquery