如何使用 google.maps.event.trigger(map, 'resize')

IT技术 javascript html google-maps zurb-foundation
2021-02-23 19:17:31

我是 JS 新手,找到了上一个问题的答案,这个问题提出了一个新问题,又把我带到了这里。

我有一个包含 Google Map API 的 Reveal Modal。单击按钮时,会弹出显示模式,并显示 Google 地图。我的问题是只有三分之一的地图显示。这是因为需要实现调整大小触发器。我的问题是如何实现 google.maps.event.trigger(map, 'resize')?我在哪里放置这个小代码片段?

这是我的测试站点。单击 Google Map 按钮查看手头的问题。 http://simplicitdesignanddevelopment.com/Fannie%20E%20Zurb/foundation/contact_us.html#

显示模型脚本:

<script type="text/javascript">
  $(document).ready(function() {
  $('#myModal1').click(function() {
  $('#myModal').reveal();
       });
          });
 </script>

我的谷歌地图脚本:

<script type="text/javascript">
 function initialize() {
 var mapOptions = {
 center: new google.maps.LatLng(39.739318, -89.266507),
 zoom: 5,
 mapTypeId: google.maps.MapTypeId.ROADMAP
 };
 var map = new google.maps.Map(document.getElementById("map_canvas"),
 mapOptions);
 }

 </script>

包含谷歌地图的 div:

  <div id="myModal" class="reveal-modal large">
  <h2>How to get here</h2>
  <div id="map_canvas" style="width:600px; height:300px;"></div>
  <a class="close-reveal-modal">&#215;</a>
 </div>

更新 2018-05-22

随着 Maps JavaScript API 3.32 版中的新渲染器版本,resize 事件不再是Map的一部分

该文件指出

调整地图大小时,地图中心固定

  • 全屏控制现在保留中心。

  • 不再需要手动触发调整大小事件。

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

google.maps.event.trigger(map, "resize"); 从版本 3.32 开始没有任何影响

5个回答

您的源代码实际上存在一些问题。

  • initialize()函数已创建,但从未调用
  • $(document).ready应叫后的jQuery我们装
  • map应是一个全局变量(如@Cristiano丰特斯说),而不是一var map
  • (重要)click永远不会调用事件。您正在尝试组合来自 Zurb 的 Reveal提供的两种方法来打开对话框(一种使用 JS,一种仅使用 HTML)。您需要使用唯一的JS方法。
  • 您使用了错误的 ID(#myModal1永远不会位于 HTML 中)。

现在:下载解决方案(下次请向我们提供下载/JSFiddle,所以我们不需要自己创建它)。

希望有帮助!

@MarcoK 您提供的“下载解决方案”链接已损坏且无法正常工作。它会显示类似“错误 (404) 我们找不到您要查找的页面”的错误消息。请更新链接或从此 stackoverflow 帖子中删除此链接。谢谢。
2021-04-27 19:17:31
非常感谢您的时间和非常详细的工作示例@MarcoK。你击中了一切,我的问题现在已经解决了。下次我在这里时,我会记得提供一个 jsfiddle。再次感谢!!
2021-05-01 19:17:31
嗯,解决方案现在已经消失了……如果在 JSFiddle 上也有这个就好了……
2021-05-08 19:17:31

只需在此处添加

<script type="text/javascript">
  $(document).ready(function() {
  $('#myModal1').click(function() {
  $('#myModal').reveal();
  google.maps.event.trigger(map, 'resize');
       });
          });
 </script>

但是你需要把地图作为一个全局变量,所以在这里失去 var

<script type="text/javascript">
   function initialize() {
     var mapOptions = {
      center: new google.maps.LatLng(39.739318, -89.266507),
      zoom: 5,
      mapTypeId: google.maps.MapTypeId.ROADMAP
     };
 --> map = new google.maps.Map(document.getElementById("map_canvas"),
   mapOptions);
 }

 </script>
我看到你的 Jquery 有错误,看看Uncaught ReferenceError: $ is not defined 还有一个;缺失after (map, 'resize')
2021-04-28 19:17:31
这个还没搞清楚 咕噜咕噜
2021-04-29 19:17:31
是的,对于应该剪切和粘贴的东西,我确实把这一切搞砸了。您的整个答案是正确的,我只是不知道如何正确更改和放置更正。感谢像你这样乐于助人的人,像我这样的 JS 菜鸟可以学习和动手。Stackoverflow.com 是一个额头保护程序!非常感谢@Crisiano Fontes 付出的时间和努力!
2021-04-30 19:17:31
感谢您的回复,但我无法使其正常工作。我按照你说的改了我的代码。我仍然只得到地图的三分之一。
2021-05-02 19:17:31
google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
                google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
                    google.maps.event.trigger(map, 'resize');
                });
});

没有找到如何对最后一个答案发表评论,但 +1 为 Cristiano Fontes 提供帮助!有效。就我而言:

<script type="text/javascript">    

$('div.map-box').hide();
$('li.map').mouseover(function(){
    $('div.map-box').show();
    google.maps.event.trigger(map, 'resize');
});

</script>

现在, google.maps.event.trigger(map, 'resize') 什么都不做。就像我们有包含谷歌地图的 mat-dialog 一样,也有同样的问题。我找到了一些可以处理它的方法:

  1. 初始化映射超时。
  2. 在 map inits 之后更改父容器的大小,然后将其更改回来。

但对我来说,所有这些方法都非常糟糕,我正在寻找更好的方法。

不,我们仍在考虑如何正确地做到这一点。这是我们的最后一个错误,所以当我们找到更好的方法时,我会在这里回答。还有关于触发调整大小的事情现在正在起作用,所以我们做了类似的事情: parentElement.resize(99%); parentElement.resize(100%); 这是唯一有效的
2021-05-02 19:17:31
你有没有想过这个?我遇到了同样的问题,我发现的只是 google.maps.event.trigger(map, 'resize'); 到处都是东西
2021-05-12 19:17:31