我有一个eventlistener在我的谷歌地图对象上监听“mouseout”事件。 这在大多数情况下都很有效,因为当光标离开地图的边界时会触发它。
但是如果光标离开地图的边缘有一个标记,则它不会触发。 有关说明,请参阅此图片:
有人知道解决这个问题的方法吗?
答案 0 :(得分:0)
我最终使用谷歌地图事件监听器解决了这个问题:
this.cursorLeavesMapListener = new google.maps.event.addListener(this.mapObject.gObj, "mouseout", function(e){thisStageMachine.cursorLeftMap()});
这节课在这里:
(function(window)
{
function cursorState(stageMachine)
{
this.stageMachine = stageMachine;
this.state = "out";
this.currentCheckStateTimer = null;
var thisCursorState = this;
this.stageMachine.mapObject.mapDOMDiv.addEventListener("mouseover", function(e){ thisCursorState.setInMapState() });
this.stageMachine.mapObject.mapDOMDiv.addEventListener("mouseout",
function(e){
thisCursorState.setOutOfMapState();
window.clearTimeout(thisCursorState.currentCheckStateTimer);
thisCursorState.currentCheckStateTimer = window.setTimeout( function(){thisCursorState.checkState()}, 100);
});
}
cursorState.prototype.setInMapState = function()
{
this.state = "in";
}
cursorState.prototype.setOutOfMapState = function()
{
this.state = "out";
}
cursorState.prototype.checkState = function()
{
if(this.state=="out")
{
this.stageMachine.cursorLeftMap();
}
}
window.cursorState = cursorState;
}(window));
你需要这个带有鼠标悬停和鼠标移动的DOMversions的奇怪结构,因为它们会在你将光标移动到地图上时不断触发。它可能与谷歌地图如何将瓷砖添加到DOM有关。 然而,当你的鼠标离开地图时,只有mouseout事件会触发,所以在100毫秒之后检查是否没有触发新的鼠标悬停事件(因为我们上次触发鼠标输出)是你需要做的,以确保我们实际上已经离开了地图当mouseout被触发时 它显然非常hacky,但它就像一个魅力。
其中一个总是被解雇。
如果有人有更优雅的解决方案,请分享。