轨迹回放时地图标记频繁闪烁如何优化?
在用Leaflet做轨迹回放时,每隔500ms更新标记位置,但地图总是卡顿闪烁,调整时间间隔也没用,这是怎么回事?
我按以下方式实现的:setInterval循环遍历坐标数组,每次创建新标记并删除旧标记:
let currentMarker;
function updatePosition(index) {
if (currentMarker) map.removeLayer(currentMarker);
const coords = trackData[index];
currentMarker = L.marker([coords.lat, coords.lng]).addTo(map);
}
这样虽然能移动标记,但地图缩放时明显掉帧,控制台没有报错。试过把setInterval改成requestAnimationFrame反而更卡,求解
setLatLng更新位置就行。你现在的写法每帧都创建新 DOM 元素、加到地图、再删掉,光垃圾回收就能卡死,尤其缩放时重绘更频繁。改成这样:
如果还卡,再加个防抖:比如每 3 个点才更新一次,或者用
map.whenReady确保地图初始化完再开始动画。另外别忘了检查trackData里是不是真有大量无效坐标(比如经纬度全 0),这种也会让标记跳来跳去加重渲染负担。如果还卡,加上防抖处理:只在地图静止时更新位置。