2015-06-14 88 views
-1

在这种page我使用下面的脚本:使谷歌地图标志器阵列的全球符标记点击事件

function initialize() { 
    var mapCanvas = document.getElementById('map'); 
    var mapOptions = {center:new google.maps.LatLng(latitudeMid,longitudeMid),zoom:15,mapTypeId:google.maps.MapTypeId.ROADMAP,streetViewControl:false,mapTypeControl:true,scaleControl:true,scaleControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT}}; 
    var map = new google.maps.Map(mapCanvas, mapOptions); 
    var markers=[]; //<=========================================== inside function initialize() 
    var i; 
    var insertion; 
    var previousMarker; 
    for (i = 0; i < fotoCount; i++) { 
    var myLatLng=new google.maps.LatLng(Latituden[i], Longituden[i]); 
    var marker = new StyledMarker({styleIcon:new StyledIcon(StyledIconTypes.MARKER,{color:'00ff00',text:Letters[i]}),position:myLatLng,map:map}); 
    marker.set('zIndex', -i); 
    marker.myIndex = i; 
    markers.push(marker); 
    google.maps.event.addListener(marker, 'click', function() { 
     var insertion=""; 
     insertion='<img src=\"http://www.pdavis.nl/Ams/'.concat(Bestanden[this.myIndex],'.jpg\"></img>'); 
     insertion=insertion.concat('<table class=width100><tr><td>Bestand: ',Bestanden[this.myIndex],'</td><td class=pright>Lokatie: ',Latituden[this.myIndex],' °N., ',Longituden[this.myIndex],' °E. (',Letters[this.myIndex],')</td>'); 
     insertion=insertion.concat('<td class=pright>Genomen: ',Datums[this.myIndex],'</td></tr><td colspan=3>Object: ',Objecten[this.myIndex],'</td></table>'); 
     $('#photo').html(insertion); 
     if(previousMarker!=null){previousMarker.styleIcon.set('color', '00ff00')}; 
     this.styleIcon.set('color', 'ff0000'); 
     thisMarker=this.myIndex; 
     previousMarker=this; 
     }); 
    } 
    google.maps.event.trigger(markers[0], 'click'); 
} 
    google.maps.event.addDomListener(window, 'load', initialize); 

点击标记高亮显示所选标记(变成红色),并显示相应的照片。两个按钮Vorige和Volgende(上一页和下一页,选择一张或下一张照片),显然不工作,因为数组标记[]是本地的功能初始化():

function Next() { 
    thisMarker++; 
    if (thisMarker>=fotoCount) {thisMarker=0}; 
    // following line not working 
    google.maps.event.trigger(markers[thisMarker], 'click'); 
} 
function Previous() { 
    thisMarker--; 
    if (thisMarker==0) {thisMarker=fotoCount-1}; 
    // following line not working 
    google.maps.event.trigger(markers[thisMarker], 'click'); 
} 

最明显的解决方法是把“var markers = []”外部函数initialize()(this页面)使此数组成为全局的,但现在突出显示的按钮(按钮“A”在开始时红色;单击的按钮变为红色)不起作用。我在这里做错了什么?

+0

[谷歌地图JS API V3 - 简单多个标记的例子]可能重复(HTTP: //stackoverflow.com/questions/3059044/google-ma PS-JS-API-V3-简单多标记的例子);使用函数闭包将标记与点击监听器相关联。 – geocodezip

回答

1

唯一不可思议的是,当您将索引0传递给最大值时,点击事件会因为发送负值而爆炸,那么更改该值并想知道它是否为-1,如果true通过更大的索引 - 1(Excepcion:无法读取的未定义的属性 '__e3ae_')

function Previous() { 
thisMarker--; 
if (thisMarker==-1) {thisMarker=fotoCount-1}; 
// following line not working 
google.maps.event.trigger(markers[thisMarker], 'click'); 
} 

Fiddle example

对不起我的英语

+0

你好Alimentador:谢谢(我正在看错方向!) –