当前位置:首页 > JavaScript

js实现小球

2026-04-06 11:50:48JavaScript

实现小球动画的 JavaScript 方法

使用 Canvas 绘制小球

创建一个 Canvas 元素并设置其宽高,通过 JavaScript 获取上下文进行绘制:

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const ball = {
  x: canvas.width / 2,
  y: canvas.height / 2,
  radius: 20,
  dx: 2,
  dy: -2,
  color: 'red'
};

function drawBall() {
  ctx.beginPath();
  ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);
  ctx.fillStyle = ball.color;
  ctx.fill();
  ctx.closePath();
}

实现小球运动逻辑

更新小球位置并处理边界碰撞检测:

function updateBall() {
  ball.x += ball.dx;
  ball.y += ball.dy;

  // 左右边界碰撞
  if (ball.x + ball.dx > canvas.width - ball.radius || ball.x + ball.dx < ball.radius) {
    ball.dx = -ball.dx;
  }

  // 上下边界碰撞
  if (ball.y + ball.dy > canvas.height - ball.radius || ball.y + ball.dy < ball.radius) {
    ball.dy = -ball.dy;
  }
}

动画循环

js实现小球

使用 requestAnimationFrame 实现平滑动画:

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  drawBall();
  updateBall();
  requestAnimationFrame(animate);
}
animate();

使用 CSS 实现小球效果

HTML 结构

<div class="ball"></div>

CSS 样式

js实现小球

.ball {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background-color: blue;
  position: absolute;
}

JavaScript 控制动画

const ball = document.querySelector('.ball');
let x = 0, y = 0;
let dx = 2, dy = 2;

function moveBall() {
  x += dx;
  y += dy;

  // 边界检测
  if (x + 50 > window.innerWidth || x < 0) dx = -dx;
  if (y + 50 > window.innerHeight || y < 0) dy = -dy;

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

物理效果增强

添加重力加速度

let gravity = 0.2;
let friction = 0.99;

function applyPhysics() {
  ball.dy += gravity;
  ball.dx *= friction;
  ball.dy *= friction;

  ball.y += ball.dy;
  ball.x += ball.dx;

  // 地面碰撞
  if (ball.y + ball.radius > canvas.height) {
    ball.y = canvas.height - ball.radius;
    ball.dy = -ball.dy * 0.8; // 弹性系数
  }
}

交互控制示例

鼠标点击生成小球

canvas.addEventListener('click', (e) => {
  const newBall = {
    x: e.clientX,
    y: e.clientY,
    radius: Math.random() * 20 + 10,
    dx: (Math.random() - 0.5) * 4,
    dy: (Math.random() - 0.5) * 4,
    color: `hsl(${Math.random() * 360}, 100%, 50%)`
  };
  balls.push(newBall);
});

完整示例整合 将上述代码片段组合即可创建交互式小球动画系统,支持多球物理模拟和用户交互。

标签: 小球js
分享给朋友:

相关文章

js实现验证

js实现验证

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

js实现tab选项卡切换

js实现tab选项卡切换

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

js画图实现

js画图实现

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

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…