【问题标题】:Google Maps Polygon Hover - Close InfoWindow on polygon mouseout or infowindow mouseout谷歌地图多边形悬停 - 在多边形鼠标悬停或信息窗口鼠标悬停时关闭信息窗口
【发布时间】:2014-07-29 14:24:38
【问题描述】:

这看起来很简单,但我找不到解决方案。我有一个带有 KML 和多边形的谷歌地图。将鼠标悬停在多边形上会弹出一个信息框。如果用户将鼠标悬停在信息框上,它需要保持打开状态,但如果用户将鼠标悬停在信息框之外,或者如果用户鼠标悬停在多边形上,那么信息框应该关闭。所以听起来很简单,但目前我只能做其中之一。

更新:

以下内容现在可以正常工作,但是有点“错误”。这是由于当用户实际上在多边形的中心(信息框弹出的位置)周围悬停时发生“mouseout”功能,脚本认为他们已将光标移出多边形,因为信息框图层加载在顶部。

代码:

// User moves the cursor outside of the active polygon
         google.maps.event.addListener(poly,"mouseout",function() {

             $poly = this;
             $infowindow_hover = false;

             $("#geoxml3_infowindow").mouseenter(function(){
                    clearTimeout($(this).data('timeoutId'));
                    $infowindow_hover = true;

                }).mouseleave(function(){
                    var someElement = $(this),
                        timeoutId = setTimeout(function(){

                                $poly.infoWindow.close();


                        }, 500);
                    //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
                    someElement.data('timeoutId', timeoutId); 
                });

            function closeInfoWindow()
            {
                if ($infowindow_hover == false) $poly.infoWindow.close();
            }

             setTimeout(closeInfoWindow, 1000)

     });

【问题讨论】:

  • 我已经尝试过了,但还有很多需要考虑的地方。我在其他库和自定义 KML 文件等中使用 geoxml3,并且得到一个简单的简化测试用例工作被证明是一场噩梦。

标签: javascript jquery google-maps google-maps-api-3


【解决方案1】:

在关闭 infoWindow 之前您需要延迟。

观察多边形的 mouseover/mouseout-events 和 infowindow 的 content-node。

在此处设置$infowindow_open-变量并运行关闭信息窗口的函数并在短时间内关闭信息窗口,这样用户就可以在多边形和信息窗口之间移动鼠标而无需关闭信息窗口。

【讨论】:

  • 感谢您的建议。请参阅上面的代码 - 我试图实现它,但它是错误的。还有什么建议吗?
  • 恐怕信息窗口没有合适的解决方案,#geoxml3_infowindow 只会匹配信息窗口的内容,而不匹配边距和箭头。不幸的是,没有实现访问这些元素的选项。可以遍历文档树来找到这些元素,但这也有问题,因为不能保证这种结构。像google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/… 这样的自定义实现将是一个选项,在那里访问包装元素更容易(并且一致)
【解决方案2】:

只需使用下面的代码来处理多边形上的鼠标悬停事件

google.maps.event.addListener(poly,"mouseout",function(e) {

    if (infoWindow) {
        infoWindow.close();
    }

});

假设var infoWindow = new google.maps.InfoWindow(); 是您的信息窗口对象。

【讨论】:

  • 感谢您的回答,但这不是解决 infoWindow 悬停时的解决方案。例如。这将在您将鼠标悬停在信息窗口上时立即关闭它,因为多边形将是“mouseout”
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多