当前位置:首页 > JavaScript

js实现反弹

2026-01-31 20:30:04JavaScript

实现反弹效果的 JavaScript 方法

使用 CSS 动画与 JavaScript 结合

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

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 逐帧更新位置。

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 中通过物理计算实现多物体反弹系统,包含碰撞检测和能量衰减。

js实现反弹

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
分享给朋友:

相关文章

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js 实现文件上传

js 实现文件上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。以下是一个基础示例: <input ty…