尝试在 Google Maps API 中实现“shouldFocus”infoWindowOpen 选项

问题描述

当在 Google Maps infoWindow 中使用 infoWindow.open 方法时,有人可以提供一个简单的示例,说明在 Javascript 中使用的“shouldFocus”布尔选项吗?

InfoWindowOpenOptions interface

...

infoWindow.open(map,marker); // 打开 infoWindow 但不要改变焦点 - 如何?

...

解决方法

调用 open 时,如果要指定选项对象,则不需要提供地图。它将在 MVCObject(标记等)所在的地图上呈现窗口。

infoWindow.open({
    anchor: marker,shouldFocus:false
});

这将阻止 InfoWindow 获得焦点。

,

编辑 2

我已经用 3.43 版(将在 8 月中旬删除)重新测试了它,它仍然有效。所以恕我直言,这是在版本 3.44 中引入的错误,同时还引入了属性 shouldFocus

目前有一些问题描述了该问题: https://issuetracker.google.com/issues/190075886 https://issuetracker.google.com/issues/190637181

编辑

我刚刚创建了一个小提琴,其中给定的方法在几种情况下不起作用。我无法重现为什么会发生这种情况。我创建了一个小提琴,它在 2.5 秒和 5 秒后打开给定的 InfoWindow

案例 1: 2.5 秒后,InfoWindow 打开,但未聚焦。如果 InfoWindow 在打开后立即关闭,则它在 5 秒后没有被聚焦。

案例 1 小提琴链接:https://jsfiddle.net/ywnj6bc4/5/

情况 2: 如果 2.5 秒后 InfoWindow 打开但未关闭,则 InfoWindow 将在 5 秒后聚焦。

案例 2 小提琴链接:https://jsfiddle.net/ywnj6bc4/4/

我仍在为我的案例寻找合适的解决方法,因为我还没有发现究竟是什么导致了这个 - 在我看来 - 错误的结果。

原答案

我刚刚遇到了同样的问题。主要是因为我使用的 InfoWindow 没有关联的标记。

我的解决方法是创建 InfoWindow,然后通过添加“假”标记作为锚选项来打开它。

如文档中所述,可能还有其他方法可以实现这一点:

如果锚不为空,则将此信息窗口定位在锚的顶部中心,而不是给定的经纬度。 InfoWindow 将在与锚点相同的地图或街景上呈现。

请参阅此代码示例。

var map = new google.maps.Map({some: options})

let infoWindow = new google.maps.InfoWindow({
  content: 'Info Window Content...',position: {lat: 47.5,lng: 8.5},});

infoWindow.open({
  shouldFocus: false,anchor: new google.maps.Marker({
    anchor: infoWindow.position,// same position as infoWindow
    map: map
  })
});