如何关闭信息窗口

发布于 2025-01-08 01:42:47 字数 2291 浏览 1 评论 0原文

我已经有一系列标记,我想在单击另一个标记时关闭打开的信息窗口。 我知道使用 v3 API,我可以使用 InfoWindow.close() 方法关闭信息窗口。但是在哪里添加代码?我尝试了很多但失败了。 我还有一个问题,为什么我需要点击“side_bar_div”中的链接来调用方法myclick(i)?

<script type="text/javascript">
  var markers=[];
  var side_bar_html='<table border=0 cellpadding=0><tr>';
  var tdrow = 1;
  var i = 0;
  function creatmarker(lat,long,map,html,index){
   var mylatlng = new google.maps.LatLng(lat,long);
   var marker = new google.maps.Marker({ 
     position: mylatlng,   
map: map,
zIndex: index
    });
var infowindow = new google.maps.InfoWindow({
  content: html
});
markers.push(marker);
side_bar_html +='<td width=330 valign=top align=left><a id="side_bar_'+i+'" href="javascript:myclick('+ (markers.length-1) +');">'+html+'</a></td>';
tdrow++;
i++;
if (tdrow > 2){side_bar_html += '</tr><tr>'; tdrow =1; }
google.maps.event.addListener(marker,'click',function(){
    infowindow.open(map,marker); 
});
   function myclick(i){
var id="side_bar_"+i;
google.maps.event.addDomListener(document.getElementById(id), "click", function(){          google.maps.event.trigger(markers[i], "click");
});
   }
   function initialize(){
var myOptions = {
       zoom: 11,
       center: new google.maps.LatLng(-33.9, 151.2),
       mapTypeId: google.maps.MapTypeId.ROADMAP
     }
     var map = new google.maps.Map(document.getElementById("mymap"),myOptions);
     var lat = "-33.890542";
     var lng = "151.274856";
     var html = 'Bondi Beach';
     creatmarker(lat,lng,map,html,5);
     var lat = "-33.923036";
     var lng = "151.259052";
     var html = 'Coogee Beach';
     creatmarker(lat,lng,map,html,4);
     var lat = "-34.028249";
     var lng = "151.157507";
     var html = 'Cronulla Beach';
     creatmarker(lat,lng,map,html,3);
     var lat = "-33.80010128657071";
     var lng = "151.28747820854187";
     var html = 'Manly Beach';
     creatmarker(lat,lng,map,html,2);
     var lat = "-33.950198";
     var lng = "151.259302";
     var html = 'Maroubra Beach';
     creatmarker(lat,lng,map,html,1);
     side_bar_html +='</tr></table>';
     document.getElementById("side_bar_div").innerHTML = side_bar_html;
 }
 google.maps.event.addDomListener(window, 'load', initialize);
</script>

I have already have an array of markers, I want to close an opened infowindow when I click another marker.
I know that with the v3 API, I can close a infowindow with the InfoWindow.close() method.But where to add the code?I have tried a lot but failed.
I have another question ,why need I click the link in "side_bar_div" tiwce to call the method myclick(i)?

<script type="text/javascript">
  var markers=[];
  var side_bar_html='<table border=0 cellpadding=0><tr>';
  var tdrow = 1;
  var i = 0;
  function creatmarker(lat,long,map,html,index){
   var mylatlng = new google.maps.LatLng(lat,long);
   var marker = new google.maps.Marker({ 
     position: mylatlng,   
map: map,
zIndex: index
    });
var infowindow = new google.maps.InfoWindow({
  content: html
});
markers.push(marker);
side_bar_html +='<td width=330 valign=top align=left><a id="side_bar_'+i+'" href="javascript:myclick('+ (markers.length-1) +');">'+html+'</a></td>';
tdrow++;
i++;
if (tdrow > 2){side_bar_html += '</tr><tr>'; tdrow =1; }
google.maps.event.addListener(marker,'click',function(){
    infowindow.open(map,marker); 
});
   function myclick(i){
var id="side_bar_"+i;
google.maps.event.addDomListener(document.getElementById(id), "click", function(){          google.maps.event.trigger(markers[i], "click");
});
   }
   function initialize(){
var myOptions = {
       zoom: 11,
       center: new google.maps.LatLng(-33.9, 151.2),
       mapTypeId: google.maps.MapTypeId.ROADMAP
     }
     var map = new google.maps.Map(document.getElementById("mymap"),myOptions);
     var lat = "-33.890542";
     var lng = "151.274856";
     var html = 'Bondi Beach';
     creatmarker(lat,lng,map,html,5);
     var lat = "-33.923036";
     var lng = "151.259052";
     var html = 'Coogee Beach';
     creatmarker(lat,lng,map,html,4);
     var lat = "-34.028249";
     var lng = "151.157507";
     var html = 'Cronulla Beach';
     creatmarker(lat,lng,map,html,3);
     var lat = "-33.80010128657071";
     var lng = "151.28747820854187";
     var html = 'Manly Beach';
     creatmarker(lat,lng,map,html,2);
     var lat = "-33.950198";
     var lng = "151.259302";
     var html = 'Maroubra Beach';
     creatmarker(lat,lng,map,html,1);
     side_bar_html +='</tr></table>';
     document.getElementById("side_bar_div").innerHTML = side_bar_html;
 }
 google.maps.event.addDomListener(window, 'load', initialize);
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怕倦 2025-01-15 01:42:47

尝试以下代码片段:

    var infoWindows = [];                                

        google.maps.event.addListener(marker,'click',function(){ 
closeInfowindow(); 
    var infowindow = new google.maps.InfoWindow({ 
  content: html 
}); 
     infowindow.open(map,marker);
infoWindows[0] = infowindow;
    }); 

function closeInfowindow(){
if(infoWindows.length > 0){
infoWindows[0].set("marker",null);
infoWindows[0].close();
infoWindows.length = 0;
}
}

希望这对您有帮助:-)

Try the following code snippet:

    var infoWindows = [];                                

        google.maps.event.addListener(marker,'click',function(){ 
closeInfowindow(); 
    var infowindow = new google.maps.InfoWindow({ 
  content: html 
}); 
     infowindow.open(map,marker);
infoWindows[0] = infowindow;
    }); 

function closeInfowindow(){
if(infoWindows.length > 0){
infoWindows[0].set("marker",null);
infoWindows[0].close();
infoWindows.length = 0;
}
}

Hope this helps you :-)

三生殊途 2025-01-15 01:42:47

正确的方法是将其存储在局部变量中,然后添加一个事件侦听器,如下所示:

function addeventlistenerinfo(marker, infowindow, i){
    google.maps.event.addListener(marker, 'click', function() {
            if (currentinfowindow)
                currentinfowindow.close();
            infowindow.open(map,marker);
            currentinfowindow = infowindow;
        });
        markersarray[i] = marker;
}

currentinfowindow 是一个全局变量,仅保存打开的信息窗口(如果存在)。

无需使用数组或额外的方法:)

The correct way to do this is to store it in a local variable and then add an eventlistener like this:

function addeventlistenerinfo(marker, infowindow, i){
    google.maps.event.addListener(marker, 'click', function() {
            if (currentinfowindow)
                currentinfowindow.close();
            infowindow.open(map,marker);
            currentinfowindow = infowindow;
        });
        markersarray[i] = marker;
}

currentinfowindow is a global variable that will only hold the open infowindow if one exists.

No need to use an array or an extra method :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文