当前位置:首页 > 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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现动画

js实现动画

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

js实现文件下载

js实现文件下载

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

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现选题

js实现选题

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