0

情况如下:

在我的谷歌地图上,每当用户将鼠标移到 GMarker 上时,我都会尝试打开一个 html 信息窗口。当指针离开标记时,该窗口应该关闭。

GEvent.addListener(my_marker, "mouseover", function() {
  MaCarte.openInfoWindowHtml(new GLatLng(my_marker.getLatLng().lat()+0.002, my_marker.getLatLng().lng()+0.001),"some text");
});

GEvent.addListener(my_marker, "mouseout", function() {
  if((MaCarte.getInfoWindow().getPoint().lat() == my_marker.getLatLng().lat()+0.002) 
      && (MaCarte.getInfoWindow().getPoint().lng() == my_marker.getLatLng().lng()+0.001))
    MaCarte.closeInfoWindow();
});

发生的情况是 onmouseout 事件被触发得太快,因此信息窗口会在它之后立即打开和关闭。

我的猜测是鼠标不再在标记上,而是在信息窗口上,导致 onmouseout 被触发。

如何让信息窗口打开,直到我的指针实际上不在标记之外?

4

3 回答 3

1

可能发生的一件事是,打开 Google 信息窗口会导致地图平移,以便整个信息窗口在视口中可见,并且不会被任何控件遮挡。平移运动会导致标记从鼠标下方移出,从而导致鼠标移出。处理这种影响的一种方法是在信息窗口上使用未记录的 {suppressMapPan:true} 选项。另一种处理方法是使用不平移地图的非 Google 信息窗口。

可能发生的另一件事是您可能有一个设计不正确的自定义 GIcon。如果 .infoWIndowAnchor 太低,则信息窗口本身可能会窃取鼠标悬停,从而导致鼠标悬停在标记上。您可以通过将 .infoWindowAnchor 的 y 坐标设置为负数来解决此问题。

但是,当您完成所有工作时,您可能会发现在标记鼠标悬停时打开信息窗口的地图很难使用。通过仅在鼠标悬停时显示一个小工具提示,并且仅在单击标记时显示完整的信息窗口,您可以获得更好的用户界面,并且一些用户已经熟悉了。

于 2009-12-09T04:55:28.073 回答
1

我会使用一个计时器和变量来指示是否可以关闭窗口。基本上,在鼠标悬停事件中启动一个计时器,并且该计时器会更改一个变量。只有在可以关闭的情况下,mouseout 事件才会关闭窗口

喜欢

GEvent.addListener(my_marker, "mouseover", function() {
  timer.start()
  MaCarte.openInfoWindowHtml(new GLatLng(my_marker.getLatLng().lat()+0.002,  my_marker.getLatLng().lng()+0.001),"some text");
});




GEvent.addListener(my_marker, "mouseout", function() {
  if (okToClose){
    if((MaCarte.getInfoWindow().getPoint().lat() == my_marker.getLatLng().lat()+0.002) 
        && (MaCarte.getInfoWindow().getPoint().lng() == my_marker.getLatLng().lng()+0.001))
      MaCarte.closeInfoWindow();
  }
});

这并不能直接回答您的问题,但可以作为一种解决方法。

希望能帮助到你!

克里斯

于 2009-12-08T17:32:21.223 回答
0

它也发生在 JavaScript/HTML 的其他领域。

有时您必须将处理程序绑定到事件,但只能在处理当前事件之后,因为它会立即被调用......

所以而不是

GEvent.addListener(...);

我愿意

setTimeout(function() { GEvent.addListener(...); }, 1);

给当前线程时间来完成处理当前事件。

希望这可以帮助。

于 2009-12-27T07:00:36.440 回答