当前位置:首页 > 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实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js实现打印

js实现打印

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

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…