Иго*_*кий 1 javascript google-maps-api-3
所以我试图平滑地移动标记,但 id 不起作用。标记正在移动,但并不顺利,如果我写的话,我可以获得相同的结果
marker[n].setPosition(moveto);
Run Code Online (Sandbox Code Playgroud)
我已经在控制台中显示了所有变量,它很好,都以正确的方式增加,但似乎
marker[n].setPosition(latlng);
Run Code Online (Sandbox Code Playgroud)
仅在循环的最后一次迭代时调用。
这是我的代码:
function animatedMove(n, current, moveto){
var lat = current.lat();
var lng = current.lng();
var deltalat = (moveto.lat() - current.lat())/100;
var deltalng = (moveto.lng() - current.lng())/100;
for(var i=0;i<100;i++){
lat += deltalat;
lng += deltalng;
latlng = new google.maps.LatLng(lat, lng);
setTimeout(
function(){
marker[n].setPosition(latlng);
},10
);
}
}
Run Code Online (Sandbox Code Playgroud)
你的代码在做什么
for(var i=0;i<100;i++){
// compute new position
// run function "f" that updates position of marker after a delay of 10
Run Code Online (Sandbox Code Playgroud)
发生的情况是,当函数 "f" (( (function(){marker[n].setPosition(latlng);}) 在延迟之后运行时,循环已经完成并且已经到达标记的最终位置。
遵循/sf/answers/1700546151/这是一种可能的解决方案
function animatedMove(n, current, moveto) {
var lat = current.lat();
var lng = current.lng();
var deltalat = (moveto.lat() - current.lat()) / 100;
var deltalng = (moveto.lng() - current.lng()) / 100;
for (var i = 0; i < 100; i++) {
(function(ind) {
setTimeout(
function() {
var lat = marker.position.lat();
var lng = marker.position.lng();
lat += deltalat;
lng += deltalng;
latlng = new google.maps.LatLng(lat, lng);
marker.setPosition(latlng);
}, 10 * ind
);
})(i)
}
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里查看演示
| 归档时间: |
|
| 查看次数: |
3573 次 |
| 最近记录: |