下面是一个实现此功能的Javascript方法:

function animateParabola(startX, startY, endX, endY, duration, element) {
  // 计算抛物线的参数
  const a = (startY - endY) / ((startX - endX) ** 2);
  const b = -2 * a * startX;
  const c = startY - a * startX ** 2;

  // 计算总的移动距离和移动的总时间
  const distance = Math.sqrt((startX - endX) ** 2 + (startY - endY) ** 2);
  const speed = distance / duration;

  // 记录开始时间
  const startTime = new Date().getTime();

  // 定义动画函数
  function animate() {
    // 计算已经过去的时间
    const currentTime = new Date().getTime();
    const elapsedTime = currentTime - startTime;

    // 计算当前位置
    const currentX = startX + speed * elapsedTime * Math.cos(Math.atan(a));
    const currentY = a * currentX ** 2 + b * currentX + c;

    // 更新元素位置
    element.style.left = currentX + 'px';
    element.style.top = currentY + 'px';

    // 如果还没有到达终点,继续动画
    if (currentX < endX) {
      requestAnimationFrame(animate);
    } else {
      // 到达终点后,再做一次反向运动
      const middleX = (startX + endX) / 2;
      const middleY = startY - distance / 4;
      animateParabola(endX, endY, middleX, middleY, duration / 2, element);
    }
  }

  // 开始动画
  requestAnimationFrame(animate);
}

使用方法:

const element = document.getElementById('box');
animateParabola(0, 0, 200, 200, 1000, element);

其中,startXstartY是起点的坐标,endXendY是终点的坐标,duration是动画的总时间(毫秒),element是要移动的DOM元素。在示例中,元素会从左上角向右下角抛出,然后再落回原位。

写一个Javascript方法给定起点和终点坐标实现Dom元素抛物线移动动画要求元素要先向上抛出再落下

原文地址: http://www.cveoy.top/t/topic/42Z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录