当前位置:首页 > JavaScript

js 实现抛物线

2026-04-04 21:00:16JavaScript

抛物线运动的基本原理

抛物线运动由水平匀速运动和垂直匀加速运动合成。水平方向速度恒定,垂直方向受重力影响速度逐渐增加。

使用 JavaScript 实现抛物线动画

通过设置元素的 positionabsolutefixed,动态修改 lefttop 属性实现移动效果。

js 实现抛物线

function parabolicMotion(element, startX, startY, endX, endY, duration) {
    const startTime = performance.now();
    const deltaX = endX - startX;
    const deltaY = endY - startY;

    function updatePosition(currentTime) {
        const elapsed = currentTime - startTime;
        const progress = Math.min(elapsed / duration, 1);

        // 水平匀速运动
        const x = startX + deltaX * progress;
        // 垂直抛物线运动(添加重力加速度)
        const y = startY + deltaY * progress + 0.5 * 9.8 * progress * progress;

        element.style.left = `${x}px`;
        element.style.top = `${y}px`;

        if (progress < 1) {
            requestAnimationFrame(updatePosition);
        }
    }

    requestAnimationFrame(updatePosition);
}

使用 CSS transform 优化性能

通过 transform 属性实现硬件加速,避免频繁触发重排。

function parabolicMotionWithTransform(element, startX, startY, endX, endY, duration) {
    const startTime = performance.now();
    const deltaX = endX - startX;
    const deltaY = endY - startY;

    function updatePosition(currentTime) {
        const elapsed = currentTime - startTime;
        const progress = Math.min(elapsed / duration, 1);

        const x = deltaX * progress;
        const y = deltaY * progress + 0.5 * 9.8 * progress * progress;

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

        if (progress < 1) {
            requestAnimationFrame(updatePosition);
        }
    }

    requestAnimationFrame(updatePosition);
}

贝塞尔曲线实现平滑抛物线

使用 cubic-bezier 定时函数模拟抛物线轨迹,适合 CSS 动画。

js 实现抛物线

.parabola {
    transition: transform 1s cubic-bezier(0.1, 0.8, 0.2, 1);
}

物理参数调整

通过修改重力加速度系数控制抛物线弧度,数值越大下坠越明显。

const gravity = 15; // 调整重力系数
const y = startY + deltaY * progress + 0.5 * gravity * progress * progress;

实际应用示例

创建从左上角到右下角的抛物线动画:

const ball = document.getElementById('ball');
parabolicMotion(ball, 0, 0, 500, 300, 2000);

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

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js画图实现

js画图实现

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

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…