多边形鼠标悬停事件位置



我的网站出现问题。我需要捕捉"mousemove"事件,然后根据事件发生时光标的位置更改提示窗口的位置。这是代码:

google.maps.event.addListener(country, 'mousemove', function(e) {
this.setOptions({fillOpacity: 1});
$('div.info-win').css('top', e.kb.clientY + 20 + 'px');
$('div.info-win').css('left', e.kb.clientX -50 + 'px');
$('div.info-win').show()
});

起初一切都很好,但很快浏览器开始显示错误,即e.kb没有定义。我通过控制台检查了事件,发现"e.kb"确实不存在。取而代之的是"e.lb",所以我在代码中更改了它。但现在问题是一样的,控制台显示"e.lb"不存在。我无法解释,但现在捕获的事件有".gb"属性而不是".lb"。有人能帮我解释为什么每周都会发生这种情况,所以我需要始终检查事件属性的名称吗??这是我第一次看到这样的问题,但同时我找不到任何解决方案!

谷歌地图鼠标事件不会给屏幕X和Y值。

相反,它似乎只给出鼠标位置的纬度/经度。

参考:

https://developers.google.com/maps/documentation/javascript/reference#MouseEventhttps://developers.google.com/maps/documentation/javascript/reference#PolyMouseEvent

您需要将纬度/经度值转换为屏幕鼠标X/Y位置,此处对此进行了解释(类似问题):

获取鼠标光标在谷歌地图V3 API标记鼠标悬停位置

映射工作了一段时间,后来开始失败的原因是您使用了MouseEvent对象的未记录属性。正如你所发现的,这些可能随时发生变化。

想想看:kblbgb听起来像在代码中用来描述鼠标位置的名称吗?你会那样随意地改变它们吗?:-)

那么,为什么谷歌会使用这样胡言乱语的名字,为什么他们总是更改它们呢?

在开发人员开发的原始源代码中,他们当然使用可读且一致的名称。但随后,他们用一个"迷你程序"编译代码,该程序缩短了私有变量/属性/方法的名称,以加快加载速度。当他们修改源代码并重新编译时,这些短名称会被任意重新分配。

你在几周内发现的三个不同的属性名称显然都引用了原始源中的同一个对象,但迷你图更改了你在浏览器中看到的名称。

永远不要认为你可以使用你在浏览器的开发工具中发现的属性或方法,尤其是如果它的名称毫无意义的话。首先在地图API文档中检查它,如果没有,就不要使用它

有关如何更改代码以使用文档化方法的详细信息,请参阅Seyong的回答。

最新更新