如何实现AmCharts 5地图中飞机仅从起点飞往终点的动画
AmCharts 5 实现飞机单向飞行(巴黎→洛杉矶)方案
要实现飞机从巴黎单向飞往洛杉矶、不掉头返回的效果,只需调整动画配置与逻辑,以下是两种实用方案:
方案一:单次飞行,抵达终点后停止
原代码中动画使用了yoyo缓动函数与无限循环,导致飞机往返飞行。我们只需修改动画参数,去掉折返逻辑:
// 替换原飞机动画代码 planeDataItem.animate({ key: "positionOnLine", to: 1, duration: 10000, loops: 1, // 仅执行一次飞行 easing: am5.ease.linear // 移除yoyo缓动,保持单向匀速 }); // 删除原有的positionOnLine监听代码(无需再处理掉头旋转) // planeDataItem.on("positionOnLine", function(value) { ... });
修改后,飞机会从巴黎出发,10秒后抵达洛杉矶并停止,不会返回起点。
方案二:循环单向飞行(抵达后重置起点再出发)
如果需要飞机持续执行巴黎→洛杉矶的单向飞行,可在动画结束后重置飞机位置并重新启动动画:
// 定义飞行动画函数 function startFlight() { planeDataItem.set("positionOnLine", 0); // 将飞机重置到巴黎起点 planeDataItem.animate({ key: "positionOnLine", to: 1, duration: 10000, easing: am5.ease.linear, done: function() { setTimeout(startFlight, 1000); // 抵达后延迟1秒再次起飞(可根据需求调整或删除) } }); } // 启动首次飞行 startFlight(); // 删除原有的positionOnLine监听代码
此方案下,飞机抵达洛杉矶后会重置到巴黎,再次起飞,全程保持单向飞行状态,不会出现掉头动作。
补充说明
原代码中遗漏了planeSeries的定义,需确保添加以下代码(在创建飞机图形前):
// 创建承载飞机的点系列 var planeSeries = chart.series.push(am5map.MapPointSeries.new(root, {}));
内容的提问来源于stack exchange,提问作者codeblazor
相关产品推荐
相关产品推荐

