2014-09-03 49 views
-1

我想在用戶將鼠標移出信息窗口時關閉信息窗口。但是,在下面的代碼中,即使我將鼠標放在infowindow上,它也會在5秒內關閉。這個錯誤還是有另一個解決方案?當用戶將鼠標移出信息窗口時,取消用戶將鼠標懸停在InfoWindow上的Google Maps V3 InfoWindow關閉事件。

var info = new google.maps.InfoWindow({ 
     content: '<div>Loading...</div>' 
}); 



var bindMarker = function(marker, attr, feature) 
{ 

    google.maps.event.addListener(marker, 'mouseover', function(clicked) { 
      info.setContent(self.createInfoWindowFor(marker, attr, feature)); 
      info.open(self.map, marker); 
    }); 

    google.maps.event.addListener(marker, 'mouseout', function(){ 
     setTimeout(function(){info.close(self.map, marker);}, '5000'); 
    }); 

    google.maps.event.addListener(marker, 'click', function(clicked) { 
      info.close(self.map, marker); 

    }); 

}; 
+0

如果我刪除setTimeout,它立即關閉。沒有改變。我只想在5秒內關閉它。但即使我將鼠標懸停在infowindow上,它也會關閉。 – snnlankrdsm 2014-09-03 18:49:01

+0

不起作用。即使我將鼠標懸停在上面,仍然會關閉infowindow。 – snnlankrdsm 2014-09-03 18:54:10

+0

我不確定我是否理解你對問題的描述。你可以發佈一個jsFiddle嗎? – CullenJ 2014-09-03 18:55:17

回答

0

據我所知,你的代碼工作正常,你只是想從,如果你將鼠標懸停在信息窗口消失停止信息窗口。

要做到這一點,你需要創建爲超時ID(見https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearTimeout)爲超時功能的全局變量,所以在你的代碼的頂部:

var infoTimeoutID = null; 

然後,你需要設置

 infoTimeoutID = setTimeout(function(){info.close(self.map, marker);}, '5000'); 

那麼你一定要到mouseover偵聽器添加到您的信息窗口時,它顯示的是看起來是這樣的:當你調用setTimeout這樣的超時ID

function() { 
    if(infoTimoutId != null) { 
     window.clearTimeout(infoTimeoutID); 
    } 
} 

您還需要添加一個mouseout處理程序,關閉信息窗口(如果需要)。

0

如果我理解正確,您正在使用setTimeOut有時間將鼠標放在infowindow上,因此它不會在標記的鼠標移出時關閉。

使用標記的mouseout嘗試使用地圖的mousemove。這樣,如果將鼠標放在infowindow上,則mousemove不會觸發事件,並且可以將鼠標放在infowindow上而不關閉它。但是當你移動地圖時,infowindow將關閉。

google.maps.event.addListener(map, 'mousemove', function (event) { 
    infowindow1.close(); 
}); 
相關問題