我想要infowindow出现时,鼠标是在一个标记,这是我的代码在coffeescript:
$(document).on 'map:ready', -> addHoverHandlers()
addHoverHandlers = ->
# m is Gmap4Rails marker, doc in gmaps4rails.base.js.coffee
for m in Gmaps.map.markers
# marker is a Google Maps Marker
# https://developers.google.com/maps/documentation/javascript/reference#Marker
marker = m.serviceObject
console.log marker.getPosition().toString()
# Show the infowindow when user mouses-in
google.maps.event.addListener marker, "mouseover", ->
console.log marker.getPosition().toString()
m.infowindow.open marker.map, marker
# Hide the infowindow when user mouses-out
google.maps.event.addListener marker, "mouseout", ->
m.infowindow.close()
加载时输出:
(39.7317, -104.92099999999999)
(35.2638, -118.91200000000003)
(36.6624, -121.64499999999998)
但是当鼠标移到每个标记上时(坐标不变):
(36.6624, -121.64499999999998)
将问题置于上下文中,以下是我如何在erb文件中触发map:ready
事件:
<% content_for :scripts do %>
<script type="text/javascript">
Gmaps.map.callback = function(){
console.log('callback');
$(document).trigger('map:ready');
}
</script>
<% end %>
<%= yield :scripts %>
我有完全相同的问题:我不知道为什么,但是当您循环Gmaps.map.markers并尝试绑定mouseover侦听器函数时,它将始终评估标记变量作为循环中的最后一个标记。
我的解决方法是:不要在鼠标悬停函数中使用标记变量,而是使用this
,这是一个Gmaps标记对象,循环Gmaps.map.markers并找到匹配的。
下面是对你的代码的修改:
$(document).on 'map:ready', -> addHoverHandlers()
addHoverHandlers = ->
# m is Gmap4Rails marker, doc in gmaps4rails.base.js.coffee
for m in Gmaps.map.markers
# marker is a Google Maps Marker
# https://developers.google.com/maps/documentation/javascript/reference#Marker
marker = m.serviceObject
console.log marker.getPosition().toString()
# Show the infowindow when user mouses-in
google.maps.event.addListener marker, "mouseover", ->
console.log marker.getPosition().toString()
# Loop on Gmaps.map.markers and find the one using this
for m2 in Gmaps.map.markers
if m2.serviceObject == this
m2.infowindow.open m2.serviceObject.map, m2.serviceObject
# Hide the infowindow when user mouses-out
google.maps.event.addListener marker, "mouseout", ->
m.infowindow.close()
我知道这是一个非常低效的方式来实现鼠标悬停功能。至少,它是有效的。
hth