天地图的Marker点终于也能实现"跳一跳"啦!虽然天地图官方API目前没有直接提供Marker点跳动的现成方法,但我们可以借助一些技术手段来实现这一效果。
效果图

核心方法
typescript
function handleMarkerJumpAnimation(marker, options) {
var {
jumpHeight = 0.0005, // 弹跳高度(经纬度偏移量)
steps = 25, // 动画步数
total = 1, // 执行次数
} = options;
// 弹跳动画参数
var curLngLat = marker.getLngLat();
marker.setLngLat (curLngLat)
var curLngLat = marker.getLngLat();
var targetLngLat = new T.LngLat(curLngLat.lng, curLngLat.lat + jumpHeight);
// 当前状态
var currentStep = 0;
var animationId;
function animate() {
if (currentStep < steps) {
// 计算新的位置
var progress = currentStep / steps;
var newLat = curLngLat.lat + (targetLngLat.lat - curLngLat.lat) * progress;
var newLngLat = new T.LngLat(curLngLat.lng, newLat);
marker.setLngLat(newLngLat);
currentStep++;
animationId = requestAnimationFrame(animate); // 使用 requestAnimationFrame 继续动画
} else {
// 动画结束,恢复初始位置
marker.setLngLat(curLngLat);
cancelAnimationFrame(animationId);
if (total === 0) {
animate = null;
animationId = null;
return;
}
total--
currentStep = 0;
animate();
}
}
animate(); // 开始动画
}
使用
typescript
// 创建标注对象
var marker = new T.Marker(new T.LngLat(116.411794, 39.9068));
// 向地图上添加标注
map.addOverLay(marker);
// 调用跳一跳方法
handleMarkerJumpAnimation(marker, {});