当前位置:首页 > JavaScript

js 实现抛物线

2026-01-31 05:03:35JavaScript

实现抛物线的基本原理

在JavaScript中实现抛物线效果,通常基于物理学的抛物线运动公式。抛物线运动由水平匀速运动和垂直匀加速运动合成。核心公式如下:

  • 水平位移公式:
    ( x = v_x \cdot t )
  • 垂直位移公式:
    ( y = v_y \cdot t + \frac{1}{2} g \cdot t^2 )
    其中 ( v_x ) 和 ( v_y ) 是初始速度分量,( g ) 是重力加速度,( t ) 是时间。

使用CSS动画实现

通过CSS的animation@keyframes实现简单抛物线动画,适合不需要动态计算的场景:

@keyframes parabola {
  0% { transform: translate(0, 0); }
  50% { transform: translate(100px, -100px); }
  100% { transform: translate(200px, 0); }
}
.ball {
  animation: parabola 2s ease-in-out;
}

使用JavaScript动态计算

通过requestAnimationFrame逐帧更新元素位置,适合需要动态控制参数的场景:

function parabolicAnimation(element, vx, vy, duration) {
  const startTime = performance.now();
  const g = 0.2; // 重力加速度

  function updatePosition(timestamp) {
    const elapsed = timestamp - startTime;
    if (elapsed > duration) return;

    const t = elapsed / 1000; // 转换为秒
    const x = vx * t;
    const y = vy * t + 0.5 * g * t * t;

    element.style.transform = `translate(${x}px, ${y}px)`;
    requestAnimationFrame(updatePosition);
  }

  requestAnimationFrame(updatePosition);
}

// 调用示例
const ball = document.getElementById('ball');
parabolicAnimation(ball, 100, -50, 2000);

贝塞尔曲线模拟

通过三次贝塞尔曲线模拟抛物线路径,适合需要平滑曲线的场景:

js 实现抛物线

const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
path.setAttribute('d', 'M0,0 Q100,-100 200,0');
const ball = document.getElementById('ball');
const length = path.getTotalLength();

function animateAlongPath() {
  let distance = 0;
  const duration = 2000;

  function updatePosition(timestamp) {
    distance = (timestamp % duration) / duration * length;
    const point = path.getPointAtLength(distance);
    ball.style.transform = `translate(${point.x}px, ${point.y}px)`;
    requestAnimationFrame(updatePosition);
  }

  requestAnimationFrame(updatePosition);
}

animateAlongPath();

注意事项

  • 重力加速度(g)的值需根据实际效果调整,通常通过实验确定。
  • 使用transform进行位移优化性能,避免直接修改left/top
  • 在动画结束后调用cancelAnimationFrame避免内存泄漏。

标签: 抛物线js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…