当前位置:首页 > JavaScript

js实现重力

2026-04-06 23:15:29JavaScript

JavaScript 实现重力效果

在 JavaScript 中实现重力效果通常用于游戏开发或动画场景,涉及物体下落、弹跳等物理模拟。以下是核心实现方法:

基础重力模拟

定义重力加速度常量(通常为正值,向下方向),并应用于物体的垂直速度:

const gravity = 0.5; // 重力加速度值
let velocityY = 0;   // 初始垂直速度
let positionY = 0;   // 初始垂直位置

function applyGravity() {
    velocityY += gravity;      // 速度受重力影响增加
    positionY += velocityY;   // 更新位置
}

边界检测与反弹

添加地面碰撞检测,实现物体触地反弹(能量损失模拟):

js实现重力

const groundHeight = 400; // 地面高度
const bounceFactor = 0.7; // 反弹系数(0-1)

function checkBoundary() {
    if (positionY > groundHeight) {
        positionY = groundHeight;
        velocityY = -velocityY * bounceFactor; // 反弹时速度反向并衰减
    }
}

完整动画循环

通过 requestAnimationFrame 实现连续动画帧:

function animate() {
    applyGravity();
    checkBoundary();
    // 更新物体渲染位置(例如DOM元素或Canvas绘制)
    object.style.top = `${positionY}px`; 
    requestAnimationFrame(animate);
}
animate();

高级优化技巧

  • 时间补偿:根据帧间隔时间(deltaTime)调整计算,避免帧率波动导致速度异常:

    js实现重力

    let lastTime = 0;
    function animate(currentTime) {
        const deltaTime = (currentTime - lastTime) / 1000; // 转换为秒
        velocityY += gravity * deltaTime;
        lastTime = currentTime;
        requestAnimationFrame(animate);
    }
  • 空气阻力:添加速度衰减模拟更真实的下落:

    const airResistance = 0.99;
    velocityY *= airResistance; // 每帧速度衰减

实际应用示例(Canvas)

在 Canvas 中绘制受重力影响的小球:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
let ball = { x: 100, y: 50, radius: 20, vx: 2, vy: 0 };

function draw() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ball.vy += gravity;
    ball.y += ball.vy;

    // 底部碰撞检测
    if (ball.y + ball.radius > canvas.height) {
        ball.y = canvas.height - ball.radius;
        ball.vy *= -bounceFactor;
    }

    ctx.beginPath();
    ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);
    ctx.fill();
    requestAnimationFrame(draw);
}
draw();

通过调整参数如 gravitybounceFactor 和初始速度,可以模拟不同材质的物体运动特性。

标签: 重力js
分享给朋友:

相关文章

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现交换

js实现交换

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

js节流实现

js节流实现

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

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…