当前位置:首页 > JavaScript

js实现色子

2026-01-31 17:28:09JavaScript

实现色子的基本思路

使用JavaScript创建一个色子(骰子)模拟器,可以通过随机数生成1到6的数字,并显示对应的骰子点数图形。

HTML结构

创建一个简单的HTML容器,用于显示骰子图形和结果:

js实现色子

<div id="dice-container">
  <div id="dice-face"></div>
  <button id="roll-btn">掷骰子</button>
  <p id="result"></p>
</div>

CSS样式

为骰子添加基本样式,使其显示为正方形并包含点数:

#dice-face {
  width: 100px;
  height: 100px;
  background-color: white;
  border: 2px solid black;
  border-radius: 10px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 50px;
  margin: 20px;
}

JavaScript实现

使用DOM操作和随机数生成骰子结果:

js实现色子

const rollBtn = document.getElementById('roll-btn');
const diceFace = document.getElementById('dice-face');
const resultText = document.getElementById('result');

rollBtn.addEventListener('click', () => {
  // 生成1-6的随机数
  const randomNum = Math.floor(Math.random() * 6) + 1;

  // 更新骰子图形
  diceFace.textContent = getDiceFace(randomNum);

  // 显示结果
  resultText.textContent = `你掷出了: ${randomNum}`;
});

// 返回对应数字的骰子图形
function getDiceFace(num) {
  const diceFaces = {
    1: '⚀',
    2: '⚁',
    3: '⚂',
    4: '⚃',
    5: '⚄',
    6: '⚅'
  };
  return diceFaces[num];
}

进阶实现:动画效果

添加掷骰子的动画效果,使体验更真实:

rollBtn.addEventListener('click', () => {
  // 禁用按钮防止重复点击
  rollBtn.disabled = true;

  // 动画效果
  let rolls = 0;
  const animationInterval = setInterval(() => {
    const tempNum = Math.floor(Math.random() * 6) + 1;
    diceFace.textContent = getDiceFace(tempNum);
    rolls++;

    if(rolls > 10) {
      clearInterval(animationInterval);
      const finalNum = Math.floor(Math.random() * 6) + 1;
      diceFace.textContent = getDiceFace(finalNum);
      resultText.textContent = `你掷出了: ${finalNum}`;
      rollBtn.disabled = false;
    }
  }, 100);
});

使用Canvas绘制骰子

如需更自定义的骰子图形,可以使用Canvas API:

function drawDiceFace(num) {
  const canvas = document.createElement('canvas');
  canvas.width = 100;
  canvas.height = 100;
  const ctx = canvas.getContext('2d');

  // 绘制骰子背景
  ctx.fillStyle = 'white';
  ctx.fillRect(0, 0, 100, 100);
  ctx.strokeStyle = 'black';
  ctx.strokeRect(0, 0, 100, 100);

  // 根据数字绘制点数
  ctx.fillStyle = 'black';
  const positions = {
    1: [[50, 50]],
    2: [[20, 20], [80, 80]],
    3: [[20, 20], [50, 50], [80, 80]],
    4: [[20, 20], [20, 80], [80, 20], [80, 80]],
    5: [[20, 20], [20, 80], [50, 50], [80, 20], [80, 80]],
    6: [[20, 20], [20, 50], [20, 80], [80, 20], [80, 50], [80, 80]]
  };

  positions[num].forEach(pos => {
    ctx.beginPath();
    ctx.arc(pos[0], pos[1], 8, 0, Math.PI * 2);
    ctx.fill();
  });

  return canvas;
}

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

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现论坛

js实现论坛

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

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现日历

js 实现日历

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

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…