我可以通过更改偏移量或仅通过 setPosition 和 latlng 数组沿折线设置动画标记。但它涉及使用 setInterval 或 setTimeout 函数。而且他们无法根据其性质(CPU 负载、队列中的其他进程等)保证准确的时间。如何补偿时间不准确并显示标记的实时位置?
在上面的问题中添加一些代码:
功能动画标记(路径,运行){
var pcur = 1,
acur = 1,
totaltime = runts[runts.length-1] - runts[0],
newPos = [];
for (var t1=1; t1 < path.length; t1++) {
var timegap = Math.round((runts[t1] - runts[t1-1])/totaltime*100),
latint = path[t1].lat() - path[t1-1].lat(),
lngint = path[t1].lng() - path[t1-1].lng();
for (var t2=1; t2 <= timegap; t2++) {
newPos[pcur] = new google.maps.LatLng( path[t1-1].lat()+t2/timegap*latint, path[t1-1].lng()+t2/timegap*lngint );
pcur++;
}
}
var animateId = setInterval(function() {
myMarker.setPosition(newPos[acur]);
acur++;
if (acur == pcur) clearInterval(animateId);
}, 20);
}
setInterval 中的 20 毫秒应该使整个动画持续 2 秒(20 * 100),但实际上都取决于 CPU 负载,将 20 毫秒减少到 5 毫秒不会产生任何变化......我如何使用 time() 函数为跟踪器设置动画基于来自 runts 数组的真实 ts?