我正在尝试使用谷歌地图,并试图在运行中添加一些polyLines。基本上,在文档的正文中,我有一个setInterval函数,它会定期将行放置一段时间,然后在经过一段时间后删除它们。访问各种映射变量时会出现问题,但是当我尝试调用测试程序时(下面),我会收到类似“marker1未定义”的错误。是否可以从地图初始化例程外部访问地图变量?
这是Javascript代码 - 这都在头脑中
var commsLine = [];
var marker1, marker2, marker3, map, Comms;
function initMap() {
latLng = new google.maps.LatLng(50.8917,-1.3989);
map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 7,
center: latLng,
mapTypeId: google.maps.MapTypeId.HYBRID,
scaleControl: true
});
marker1 = new google.maps.Marker({
position: new google.maps.LatLng(50.8917, 0),
map: map
});
marker2 = new google.maps.Marker({
position: new google.maps.LatLng(50.8917, -1.5),
map: map
});
marker3 = new google.maps.Marker({
position: new google.maps.LatLng(51.5, 0),
map: map
});
// DrawLine(); works when placed here but I want to call it from the
// setInterval function in the body
}
function DrawLine()
{
commsLine.push( marker1.getPosition() );
commsLine.push( marker2.getPosition() );
Comms = new google.maps.Polyline({
path: commsLine,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
Comms.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initMap);
答案 0 :(得分:0)
我认为你遇到了种族问题:
var marker 1;//var init
drawLine();//draw line called, marker isnt set yet
initMap(); //map ready
解决方案1: 锁定drawLine()直到initMap完成
var mapready=false;
function initMap(){
//your code
mapready=true;
}
function drawLine(){
if(!mapready){return false;}
//your code
}
如果drawLine可以由用户引起,这是一个很好的解决方案。
解决方案2a: 在地图出现时调用drawLine:
function initMap(){
//your code
drawLine();
}
解决方案2b: 如果你想动态调用drawLine(有时候,有时候不是),解决方案并不好。 注册回调比这更好:
mapready=[];
function initMap(){
//your init code
//map is ready so call callbacks
for(i=0;i<mapready.length;i++){
mapready[i]();
}
//if an callback is added now, fire it directly
mapready={};
mapready.push=function(func){func();};
}
添加回调:
mapready.push(drawLine);