Javascript 将参数向下传递到嵌套函数Google Maps v3
很抱歉这里有个新问题,但我对javascript还是新手。理想情况下,我想调用myLoop(latLong);但是,除非我将变量设置在函数之外,否则我似乎无法让.setPosition()识别该变量Javascript 将参数向下传递到嵌套函数Google Maps v3,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,很抱歉这里有个新问题,但我对javascript还是新手。理想情况下,我想调用myLoop(latLong);但是,除非我将变量设置在函数之外,否则我似乎无法让.setPosition()识别该变量 var x = 0; var y = 0; var z = 0; var v = 0; function xy(a,b,c,d) { var longDistance = Math.abs(a-d); var longTime
var x = 0;
var y = 0;
var z = 0;
var v = 0;
function xy(a,b,c,d) {
var longDistance = Math.abs(a-d);
var longTime = longDistance/0.1*0.5;
var latDistance = b-c;
var latRate = latDistance/longTime*0.5;
x = a; //origin long
y = b; //oringin lat
z = latRate;
w = d; //destination long
v = c; //destination lat
}
function myLoop () {
setTimeout(function () {
var latLong = new google.maps.LatLng(y,x);
marker.setPosition(latLong);
x = x + 0.1;
y = y - z;
if (x < w && y < v) {
myLoop();
} else {
alert('finished');
}
}, 0.5)
}
xy(-118,33,40,-73);
myLoop();
var x=0;
var y=0;
var z=0;
var v=0;
函数xy(a,b,c,d){
var longDistance=数学绝对值(a-d);
var longTime=长距离/0.1*0.5;
var latDistance=b-c;
var latRate=latDistance/longTime*0.5;
x=a;//原点长
y=b;//原纬度
z=板条率;
w=d;//目标长
v=c;//目标lat
}
函数myLoop(){
setTimeout(函数(){
var latLong=new google.maps.LatLng(y,x);
标记器设置位置(拉长);
x=x+0.1;
y=y-z;
如果(x
只需将latLong
变量递归地传递到myLoop()
函数中即可。
为此,您可以在函数外创建第一个latLong变量,然后调用函数(传入第一个latLong变量),然后在latLong函数内检查条件,如果需要再次调用myLoop函数,请更新latLong变量,然后再次调用myLoop函数
下面是递归代码的外观:
var x = 0;
var y = 0;
var z = 0;
var v = 0;
// Your first latLong
var latLong = new google.maps.LatLng(y,x);
function xy(a,b,c,d) {
// ...
}
// Pass in the latLong variable
function myLoop (latLong) {
setTimeout(function () {
marker.setPosition(latLong);
x = x + 0.1;
y = y - z;
if (x < w && y < v) {
// now create a new latLong, and pass it
// back into this function recursively
latLong = new google.maps.LatLng(y,x);
myLoop(latLong);
} else {
alert('finished');
}
}, 0.5)
}
xy(-118,33,40,-73);
// Now call the myLoop function to get the recursion started
myLoop(latLong);
这种结构为您提供了一种封装所有计算逻辑的干净方法,同时也为您提供了一个漂亮、干净的入口点。使用此新重构,您可以从一行代码开始循环:
latLongGenerator.startLoopWith(-118,33,40,-73);
我还没有测试过这段代码,但它应该可以帮助您走上正确的道路
希望这有帮助 我知道我的问题听起来很糟糕,因为这是最明显的答案,但它不起作用。理想情况下,我不需要函数外的x,y,z,v变量。。。我希望函数能够接受所有参数,这样我就只有myLoop函数了。ok@user1724492,看看我更新的答案是否有用。我添加了一个新的选择。没问题!很乐意帮忙!
latLongGenerator.startLoopWith(-118,33,40,-73);