当前位置:首页 > JavaScript

js 实现抛物线

2026-01-31 05:03:35JavaScript

实现抛物线的基本原理

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

js 实现抛物线

  • 水平位移公式:
    ( 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实现简单抛物线动画,适合不需要动态计算的场景:

js 实现抛物线

@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);

贝塞尔曲线模拟

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

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实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…