Google Maps API JS V3:infowindow.getPosition()== undefined?

时间:2014-07-29 09:25:43

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

如果infowindow可见,我想为toogle制作一些东西。我的表达是:

    if(infowindow.getPosition() != marker.getPosition())

问题是,infowindow.getPosition()返回undefined,如果它有位置。
JSFiddle-Demo

我做错了什么?

完整代码:

<html>
        <head>
                <style type="text/css">
                    html,body,#map-canvas {
                        height: 100%;
                        width:100%;
                        margin: 0;
                        padding: 0;
                    }
                </style>
                <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
                <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?language=de&v=3"></script>
                <script type="text/javascript">

                    $( document ).ready(function() {
                        var map = new google.maps.Map(document.getElementById("map-canvas"), {
                            center: new google.maps.LatLng(50.2881829, 11.4835767),
                            zoom: 6
                        });

                        var marker = new google.maps.Marker({
                            position: new google.maps.LatLng(50.2881829, 11.4835767),
                            map: map,
                        });

                        var infowindow = new google.maps.InfoWindow({
                            content: '<div id="content">test123</div>'
                        });

                        google.maps.event.addListener(marker, 'click', function() {
                            console.log(infowindow.getPosition());
                            console.log(marker.getPosition());
                            if(infowindow.getPosition() != marker.getPosition()) {
                                infowindow.open(map,marker);
                            } else {
                                infowindow.close();
                            }
                        });
                    });
                </script>
        </head>
        <body>
            <div id="map-canvas"></div>
        </body>
    </html>

3 个答案:

答案 0 :(得分:2)

由于似乎open - 方法不会更新position的{​​{1}},因此您需要自行完成(例如通过绑定infowindow到标记的位置):

infowindow

演示:http://jsfiddle.net/aBg3N/

另一种解决方案(但此解决方案依赖于未记录的属性 infowindow.unbind('position'); if(infowindow.getPosition() != this.getPosition()) { infowindow.bindTo('position',this,'position'); infowindow.open(map,this); } else { infowindow.close(); infowindow.setPosition(null); } ):

anchor

演示:http://jsfiddle.net/AZC3z/

两种解决方案都适用于可拖动标记,当您对多个标记使用相同的infowindow时也是如此

答案 1 :(得分:0)

我不确定infowindow.getPosition()。但是如果你想检查infowindow是否打开,你可以试试这段代码。

JS:

function check(infoWindow) {
    var map = infoWindow.getMap();
    return (map !== null && typeof map !== "undefined");
}

infowindow传递给该函数,它将根据true的可见性返回falseinfowindow

演示:http://jsfiddle.net/lotusgodkk/x8dSP/3699/

答案 2 :(得分:0)

显然google.maps.InfoWindow除非你设置一个位置,否则我没有位置,如果我这样做:

var infowindow = new google.maps.InfoWindow({
    content: '<div id="content">test</div>',
    position: new google.maps.LatLng(0,0)
});

fiddle

或:

var infowindow = new google.maps.InfoWindow({
    content: '<div id="content">test</div>',
    position: marker.getPosition()
});

infowindow.getPosition()返回值集。

不幸的是,这不能用于检测信息窗口当前是否可见,因此您的测试无法按预期工作。