如果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>
答案 0 :(得分:2)
由于似乎open
- 方法不会更新position
的{{1}},因此您需要自行完成(例如通过绑定infowindow到标记的位置):
infowindow
另一种解决方案(但此解决方案依赖于未记录的属性 infowindow.unbind('position');
if(infowindow.getPosition() != this.getPosition()) {
infowindow.bindTo('position',this,'position');
infowindow.open(map,this);
} else {
infowindow.close();
infowindow.setPosition(null);
}
):
anchor
两种解决方案都适用于可拖动标记,当您对多个标记使用相同的infowindow时也是如此
答案 1 :(得分:0)
我不确定infowindow.getPosition()
。但是如果你想检查infowindow是否打开,你可以试试这段代码。
JS:
function check(infoWindow) {
var map = infoWindow.getMap();
return (map !== null && typeof map !== "undefined");
}
将infowindow
传递给该函数,它将根据true
的可见性返回false
或infowindow
。
答案 2 :(得分:0)
显然google.maps.InfoWindow除非你设置一个位置,否则我没有位置,如果我这样做:
var infowindow = new google.maps.InfoWindow({
content: '<div id="content">test</div>',
position: new google.maps.LatLng(0,0)
});
或:
var infowindow = new google.maps.InfoWindow({
content: '<div id="content">test</div>',
position: marker.getPosition()
});
infowindow.getPosition()
返回值集。
不幸的是,这不能用于检测信息窗口当前是否可见,因此您的测试无法按预期工作。