Javascript GMarker onmouseout事件太快激发

Javascript GMarker onmouseout事件太快激发,javascript,google-maps,onmouseout,Javascript,Google Maps,Onmouseout,情况如下: 在我的谷歌地图上,每当用户将鼠标移到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"); }

情况如下:

在我的谷歌地图上,每当用户将鼠标移到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被触发


如何才能让信息窗口打开,直到指针实际超出标记?

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

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

希望有帮助


Chris

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

另一件可能发生的事情是,你可能有一个错误设计的自定义GIcon。如果.infoWIndowAnchor太低,infowindow本身可能会窃取鼠标指针,从而导致标记上的鼠标弹出。您可以通过将.infoWindowAnchor的y坐标设置为负值来处理此问题


然而,当你把所有的工作都做好后,你可能会发现在marker mouseover上打开信息窗口的地图很难使用。通过在鼠标上方只显示一个小的工具提示,并在单击标记时只显示完整的信息窗口,您可以获得一个更好的用户界面,这也是一些用户已经熟悉的界面。

在JavaScript/HTML的其他区域也会出现这种情况

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

所以不是

GEvent.addListener(...);
我知道

为当前线程提供完成处理当前事件的时间


希望这能有所帮助。

我同意你的最后一点,我仍在与客户讨论这一点。
GEvent.addListener(...);
setTimeout(function() { GEvent.addListener(...); }, 1);