当前位置:首页 > JavaScript

js实现骰子

2026-03-02 07:06:36JavaScript

实现骰子的基本思路

使用JavaScript实现骰子功能,核心是通过随机数生成骰子的点数,并结合DOM操作或Canvas绘制骰子图形。以下是两种常见实现方式:

方法1:DOM + CSS实现骰子

通过HTML元素和CSS样式模拟骰子外观,利用JavaScript控制点数变化。

HTML结构

<div id="dice">
  <div class="dot"></div>
  <!-- 其他骰子点数对应的dot元素 -->
</div>
<button id="roll">掷骰子</button>

CSS样式

#dice {
  width: 100px;
  height: 100px;
  background: white;
  border: 2px solid black;
  border-radius: 10px;
  position: relative;
  margin: 20px;
}
.dot {
  width: 20px;
  height: 20px;
  background: black;
  border-radius: 50%;
  position: absolute;
  display: none;
}

JavaScript逻辑

document.getElementById('roll').addEventListener('click', function() {
  const dice = document.getElementById('dice');
  const dots = dice.querySelectorAll('.dot');
  const roll = Math.floor(Math.random() * 6) + 1;

  // 隐藏所有点数
  dots.forEach(dot => dot.style.display = 'none');

  // 根据随机数显示对应点数
  switch(roll) {
    case 1:
      dots[0].style.display = 'block';
      dots[0].style.top = '40px';
      dots[0].style.left = '40px';
      break;
    // 其他点数布局...
    case 6:
      dots.forEach(dot => dot.style.display = 'block');
      // 设置6个点的位置
      break;
  }
});

方法2:Canvas绘制骰子

使用Canvas动态绘制骰子图形,适合需要更复杂视觉效果的情况。

HTML结构

<canvas id="diceCanvas" width="200" height="200"></canvas>
<button id="rollCanvas">掷骰子</button>

JavaScript逻辑

const canvas = document.getElementById('diceCanvas');
const ctx = canvas.getContext('2d');

function drawDice(number) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = 'white';
  ctx.strokeStyle = 'black';
  ctx.lineWidth = 2;
  ctx.roundRect(50, 50, 100, 100, 10);
  ctx.fill();
  ctx.stroke();

  ctx.fillStyle = 'black';
  // 根据点数绘制圆点
  if (number === 1 || number === 3 || number === 5) {
    ctx.beginPath();
    ctx.arc(100, 100, 8, 0, Math.PI * 2);
    ctx.fill();
  }
  // 其他点数布局...
}

document.getElementById('rollCanvas').addEventListener('click', function() {
  const roll = Math.floor(Math.random() * 6) + 1;
  drawDice(roll);
});

骰子点数布局参考

骰子点数的标准布局如下(以中心为坐标原点):

  • 1点:中心
  • 2点:左上和右下
  • 3点:左上、中心、右下
  • 4点:四个角落
  • 5点:四个角落加中心
  • 6点:分两排三个点

动画效果增强

可以为骰子添加旋转动画提升体验:

js实现骰子

function animateRoll() {
  let rotations = 0;
  const interval = setInterval(() => {
    rotations++;
    dice.style.transform = `rotate(${rotations * 30}deg)`;
    if (rotations > 10) {
      clearInterval(interval);
      // 显示最终点数
    }
  }, 100);
}

注意事项

  1. 随机数生成使用Math.random()时需注意范围控制
  2. Canvas绘制需考虑不同DPI设备的显示问题
  3. 移动端支持可添加触摸事件
  4. 如需3D效果可结合CSS 3D变换或WebGL

以上两种方法均可扩展为多骰子系统,只需循环创建多个骰子实例即可。

标签: 骰子js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…