当前位置:首页 > 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如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"none"…

js尚未实现

js尚未实现

JavaScript 尚未实现的功能 JavaScript 作为一门不断发展的语言,仍有一些功能尚未被原生支持或标准化。以下是一些常见的尚未实现的功能或特性: Promise.any() 的替代方案…