0

我可以通过更改偏移量或仅通过 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?

4

0 回答 0