在InfoBubble.js中使用fancyBox和Google Maps API

时间:2014-07-22 22:16:47

标签: javascript jquery google-maps

我似乎无法在fancyBox(即我的信息窗口)中加载InfoBubble。我在InfoBubble中有一个按钮,单击该按钮时,应使用fancyBox显示图像。我曾遇到过以前的问题here和其他几个问题,但这些解决方案都不适用于我。

我设置的方式如下。在index.html

<script src="jquery-1.11.1.min.js"></script>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script src="map.js"></script>
<script src="jquery.fancybox.pack.js"></script>
<script src="infobubble.js"></script>
<script>
$(document).ready(function() {
    $(".dialog").fancybox({ width: '50%', height: '50%', closeClick: true });
});    
</script>

map.js

infoBubble = new InfoBubble({
        maxWidth: 200,
        content: '<a class="dialog" href="preview.jpg" target="_blank">
                  <img src="button-icon.png"/></a>',
        position: new google.maps.LatLng(-34.397, 150.644)
});

google.maps.event.addListener(marker, 'click', function() {
    infoBubble.open(map, marker);

通过引用CSS类.dialog,它不应该工作,因为脚本已经在index.html页面中了吗?它不起作用。相反,我只是被重定向到新页面中的图像。

2 个答案:

答案 0 :(得分:1)

在运行之前,您需要等待InfoBubble的domready事件触发:

$(".dialog").fancybox({ width: '50%', height: '50%', closeClick: true });

example jsfiddle

google.maps.event.addListener(marker, 'click', function () {
    infoBubble.open(map, marker);
    google.maps.event.addListenerOnce(infoBubble, 'domready', function () {
        $(".dialog").fancybox({
            width: '200px',
            height: '200px',
            closeClick: true
        });
    });
});

答案 1 :(得分:0)

我遇到了同样的问题,我让它像这样工作。

您需要按照geocodezip的建议为domready事件添加一个事件监听器,但需要进行一些修改。简单地用domready事件打开fancybox似乎不起作用。我不确定为什么不。

从大量的小提琴中,我能够发现将代码添加到onclick事件似乎是这样做的。请注意,onclick事件处理程序有两个参数。第一个打开fancybox。第二个向onclick事件处理程序返回false。没有它,页面会在fancybox加载后立即重定向。

google.maps.event.addListener(marker, 'click', function () {
    infoBubble.open(map, marker);
    google.maps.event.addListenerOnce(infoBubble, 'domready', function () {

        var thecode = "$.fancybox.open([{href : 'preview.jpg', type : 'iframe'}]); return false;";

        $(".dialog").attr('onclick', thecode);

    });
});