当前位置:首页 > JavaScript

js实现反弹

2026-01-31 20:30:04JavaScript

实现反弹效果的 JavaScript 方法

使用 CSS 动画与 JavaScript 结合

通过 CSS 定义关键帧动画实现反弹效果,JavaScript 控制动画触发。CSS 的 animation-timing-function 使用 cubic-bezier 曲线模拟物理反弹。

js实现反弹

const element = document.getElementById('bouncing-element');
element.style.animation = 'bounce 1s cubic-bezier(0.3, 0.1, 0.2, 1.5)';

// CSS 部分需在样式表中定义
<style>
@keyframes bounce {
  0% { transform: translateY(0); }
  50% { transform: translateY(-100px); }
  100% { transform: translateY(0); }
}
</style>

基于物理公式的 JavaScript 实现

利用重力加速度和弹性系数模拟真实反弹过程,通过 requestAnimationFrame 逐帧更新位置。

js实现反弹

let position = 0;
let velocity = 0;
const gravity = 0.5;
const elasticity = 0.7;
const floor = 300;

function animate() {
  velocity += gravity;
  position += velocity;

  if (position > floor) {
    position = floor;
    velocity = -velocity * elasticity;
  }

  element.style.transform = `translateY(${position}px)`;
  requestAnimationFrame(animate);
}
animate();

使用 GreenSock (GSAP) 库

GSAP 提供现成的反弹缓动函数,简化开发流程。安装后直接调用预设的 bounce 缓动模式。

gsap.to("#ball", {
  y: 300,
  duration: 2,
  ease: "bounce.out"
});

Canvas 绘制反弹动画

在 Canvas 中通过物理计算实现多物体反弹系统,包含碰撞检测和能量衰减。

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

function update() {
  balls.forEach(ball => {
    ball.vy += 0.2;
    ball.x += ball.vx;
    ball.y += ball.vy;

    if(ball.y + ball.radius > canvas.height) {
      ball.y = canvas.height - ball.radius;
      ball.vy *= -0.8;
    }

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

  requestAnimationFrame(update);
}
update();

注意事项

  • 性能优化:对频繁变化的元素使用 transform 而非 top/left 属性以触发硬件加速
  • 弹性系数:通常取值 0.6-0.9 之间模拟自然反弹
  • 边界检测:需考虑容器边界和碰撞物体的尺寸
  • 动画停止条件:当速度低于阈值时应停止计算以节省资源

标签: js
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Jav…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url,…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取…