2009-12-08 89 views
0

這裏的情況:的GMarker 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"); 
}); 

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被解僱。

如何才能讓信息窗口打開,直到我的指針實際上脫離標記?

回答

1

我會使用一個計時器和變量來決定是否關閉窗口。基本上,在mouseover事件中有一個定時器啓動,該定時器改變一個變量。 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(); 
    } 
}); 

這並不直接回答你的問題,但它會工作作爲一種解決方法。

希望它有幫助!

克里斯

+0

似乎是一個很好的解決方法... – RedBlueThing 2009-12-09 00:28:03

1

一兩件事,可能發生的是,打開谷歌信息窗口可能導致地圖,以平移整個信息窗口的是在視口中可見,而不是由任何控件的遮蔽。平移運動可能導致標記從鼠標下方移出,導致鼠標移出。處理這種效應的一種方法是在infowindow中使用未公開的{suppressMapPan:true}選項。處理這種情況的另一種方式是使用不會平移地圖的非Google infowindow。

另一件可能發生的事情是您可能設計錯誤的自定義GIcon。如果.infoWIndowAnchor太低,則infowindow本身可能會竊取鼠標懸停,導致標記上出現鼠標懸停。你可以通過設置.infoWindowAnchor的y座標更負面來處理這個問題。

但是,當你得到它所有的工作,你可能會發現一個地圖,打開標記鼠標懸停infowindow是尷尬的使用。您可以獲得更好的用戶界面,並且一些用戶已經熟悉,只需在鼠標懸停時顯示一個小工具提示,並在點擊標記時僅顯示完整的信息窗口。

+0

我同意你的最後一點,我仍然在與客戶辯論。 – 2009-12-09 08:29:18

0

它也發生在JavaScript/HTML的其他領域。

有時你不得不處理程序綁定到一個事件,但只能處理在當前操作後,因爲它立即調用...

所以不是

GEvent.addListener(...); 

我做

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

給當前線程完成處理當前事件的時間。

希望這會有所幫助。

相關問題