当前位置:首页 > JavaScript

js实现投篮

2026-03-14 16:32:19JavaScript

实现投篮效果的JavaScript代码

创建一个简单的投篮动画可以通过HTML5 Canvas和JavaScript实现。以下是一个基础示例,模拟篮球从投篮点到篮筐的抛物线运动。

// 获取Canvas元素和上下文
const canvas = document.getElementById('basketballCanvas');
const ctx = canvas.getContext('2d');

// 篮球属性
const ball = {
  x: 50,
  y: canvas.height - 50,
  radius: 15,
  color: 'orange',
  velocityX: 5,
  velocityY: -10,
  gravity: 0.2
};

// 篮筐属性
const hoop = {
  x: canvas.width - 100,
  y: 150,
  width: 60,
  height: 5
};

// 绘制篮球
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 drawHoop() {
  ctx.fillStyle = 'red';
  ctx.fillRect(hoop.x, hoop.y, hoop.width, hoop.height);
}

// 更新篮球位置
function update() {
  // 清除画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制篮筐
  drawHoop();

  // 更新篮球位置
  ball.x += ball.velocityX;
  ball.y += ball.velocityY;
  ball.velocityY += ball.gravity;

  // 绘制篮球
  drawBall();

  // 检测是否碰到篮筐
  if (ball.x + ball.radius > hoop.x && 
      ball.x - ball.radius < hoop.x + hoop.width && 
      ball.y + ball.radius > hoop.y && 
      ball.y - ball.radius < hoop.y + hoop.height) {
    alert('投篮成功!');
    resetBall();
  }

  // 检测是否出界
  if (ball.y > canvas.height || ball.x > canvas.width) {
    resetBall();
  }

  requestAnimationFrame(update);
}

// 重置篮球位置
function resetBall() {
  ball.x = 50;
  ball.y = canvas.height - 50;
  ball.velocityX = 5;
  ball.velocityY = -10;
}

// 开始动画
update();

HTML结构

需要添加以下HTML代码来配合JavaScript运行:

<canvas id="basketballCanvas" width="600" height="400"></canvas>

CSS样式

可以添加基本样式增强视觉效果:

#basketballCanvas {
  border: 1px solid black;
  background-color: #f0f0f0;
  display: block;
  margin: 0 auto;
}

增强交互性

可以添加鼠标点击事件来控制投篮时机:

canvas.addEventListener('click', function() {
  resetBall();
  update();
});

物理参数调整

抛物线运动效果可以通过调整以下参数实现不同投篮效果:

js实现投篮

  • velocityX:控制水平速度
  • velocityY:控制初始垂直速度
  • gravity:控制重力影响程度

这些代码创建了一个简单的投篮模拟,篮球会沿着抛物线轨迹运动,当碰到篮筐时会显示成功提示。可以根据需要调整参数来改变投篮的力度和角度。

标签: js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现tab选项卡切换

js实现tab选项卡切换

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

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js节流实现

js节流实现

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