openlayers实现图标移动动画

let animationFrameId = null;
function startAnimation(targetLonLat) {
  // 将目标经纬度坐标转换为地图上的坐标
  const newCoordinates = fromLonLat(targetLonLat);

  // 获取要素当前的坐标作为起始坐标
  const oldCoordinates = feature.getGeometry().getCoordinates();

  // 定义动画持续的时间,单位为毫秒
  const duration = 500;

  // 初始化一个变量 start,用于记录动画开始的时间戳
  let start = null;

  // 定义一个递归函数 animate,用于执行动画效果
  const animate = (timestamp) => {
    // 如果 start 为 null,则将当前时间戳赋给 start,表示动画开始
    if (!start) start = timestamp;

    // 计算从动画开始到当前时间的时间差
    const elapsed = timestamp - start;

    // 判断动画是否仍在进行中
    if (elapsed < duration) {
      // 计算动画完成的比例
      const fraction = elapsed / duration;

      // 计算当前坐标
      const currentCoordinates = [
        oldCoordinates[0] + (newCoordinates[0] - oldCoordinates[0]) * fraction,
        oldCoordinates[1] + (newCoordinates[1] - oldCoordinates[1]) * fraction,
      ];

      // 更新要素位置
      feature.getGeometry().setCoordinates(currentCoordinates);

      // 继续请求下一帧动画
      animationFrameId = requestAnimationFrame(animate);
    } else {
      // 动画结束,将要素移动到目标位置
      feature.getGeometry().setCoordinates(newCoordinates);
    }
  };

  // 开始执行动画
  animationFrameId = requestAnimationFrame(animate);
}

思路就是用windows的浏览器动画api实现。   如果哪位大佬有更好的方法敬请指教

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值