【问题标题】:Google Maps InfoBox with click handlers and scrollbar带有点击处理程序和滚动条的 Google 地图信息框
【发布时间】:2011-12-31 11:57:32
【问题描述】:

我有一个使用 Google Maps javscript API 和 Infobox 插件(本机 InfoWindow 的可定制版本)的应用程序。

在我有以下用例之前它工作正常: 如果内容很大,我需要一个带有滚动条的信息框,并且它还需要包含几个带有点击侦听器的 HTML 元素。

为了支持信息框内的点击处理程序,我通常需要做的是设置 enableEventPropagation=true,并使用 jQuery 委托来设置点击处理程序。如果我不允许事件传播,jQuery 委托将不起作用。

在我不得不将它与一个正常工作的滚动条结合起来之前,这很好用!我发现只有在启用事件传播 = false 时滚动条才会起作用,因为如果启用了事件传播,则拖动事件只会传递给地图并解释为平移。

有谁知道我可以做些什么来让信息框内容上的滚动条正常工作,并能够在某些内容上设置点击处理程序?

对我来说,enableEventPropagation=false 可以解决这两个问题听起来合乎逻辑,因为我不明白为什么需要将点击事件传播到地图才能触发我附加到 html 元素的处理程序。

这是我的信息框的设置对象:

{
        content: "[my html in here]",
        disableAutoPan: false,
        pixelOffset: new google.maps.Size(-77, 10),
        boxClass: "infoBox",
        infoBoxClearance: new google.maps.Size(18, 30),
        closeBoxMargin: "14px 6px",
        pane: "floatPane",
        enableEventPropagation: true
};

【问题讨论】:

    标签: jquery google-maps-api-3


    【解决方案1】:

    以防万一您仍在处理此问题,您需要更改地图选项以在鼠标进入信息框时关闭平移/缩放。你可以使用这样的东西:

    $(document).delegate("div#ib", "mouseenter", function() {
    
        theMap.setOptions({
           draggable: false,
           scrollwheel: false
        });
        console.log("mouse enter detected");
    
    });
    
    $(document).delegate("div#ib", "mouseleave", function() {
        theMap.setOptions({
            draggable: true,
            scrollwheel: true
        });
        console.log("mouseleave detected");
    });
    

    【讨论】:

    • 就像一个额外的陷阱...确保 InfoBox 的 enableEventPropagation 参数设置为 true 否则它将吞噬像 Moby Dick 这样的事件 :)
    • id 选择器 $("#ib") 比 $("div#ib") 快,因为它是转换为 document.getelementbyid("ib") 的原生选择器。
    • 我以为我快疯了!我在document 上设置了事件委托,但它仍然没有触发。我想也许谷歌地图正在制作 iframe 或其他一些奇怪的东西。谢谢!
    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2014-04-06
    • 2017-02-18
    相关资源
    最近更新 更多