JavaScript实现动态掷骰子效果:从静态到随机点数

作者:窗边听雨时间:2026-10-23 12:18:04浏览:464

本文详解如何使用JavaScript实现掷骰子动画效果。通过点击按钮触发静态图片替换为动态GIF,利用setTimeout设置随机停止时间并生成1至6的随机点数。重点解析如何通过开关变量防止用户连续点击导致的逻辑冲突,确保动画完整执行后再响应下一次操作。

掷骰子效果实现思路

本案例旨在实现一个掷骰子的交互效果。

当用户点击按钮时,骰子开始转动,经过一段随机时长后自动停止,并显示其中一个点数。

实现思路如下:

首先,在用户点击按钮后,将原本静态的骰子图片替换为动态转动的GIF图片;接着,创建一个定时器,在随机设定的时间后,将动态图片随机替换为1至6点中的任意一张静态图片。

防重复点击与开关机制

需要注意以下事项:

1、需要考虑用户在点击一次按钮后连续多次点击按钮的场景。 2、为避免潜在问题,需确保定时器执行完毕后,再次点击按钮才生效。 3、此处设置了一个开关机制: 当用户点击按钮时,首先检查开关状态;若开关未关闭,则执行函数内容; 若开关已关闭,则不执行函数体,即无任何效果。

2、为避免不必要的逻辑错误,需确保定时器执行完毕后,再次点击按钮才有效。

CSS与HTML结构


*{margin:0; padding:0}
#container{padding:10px;width:200px;margin:auto;height:200px;border:orange solid 1px; border-radius:8px;}
#dice{width:200px;height:200px;}
#command{margin:auto;width:100px;}
#command input{width:100px;height:30px;border:#ccc solid 1px;border-radius:8px;}

3、此处设置了一个开关机制:


<div id="container">
  <img src="img/dice_1.png" id="dice" alt="">
</div>
<div id="command">
  <input type="button" onclick="shake();" value="摇一摇">
</div>

当用户点击按钮时,先判断开关状态;若开关未关闭(即处于开启状态),则执行函数内容;若开关已关闭,则不执行函数体,即无任何效果。

JavaScript核心逻辑


// 封装函数,便于通过id获取元素
function $(id) {
 return document.getElementById(id);
}

// 生成随机数
function rand(min,max){
 if (min>max) {
 var mid = min;
 min = max;
 max = mid;
 }
 //65<=Math.random()*26+65<26+65
 return parseInt(Math.random()*(max-min+1)+min);
}

//创建一个开关,默认为true(打开状态)
var oPlay = true;

//点击事件
function shake() {
 if(oPlay){ //判断开关的状态,若为true,执行下边的内容
 oPlay = false; //开始执行后,关闭开关
 $("dice").src = "img/diceDynamic.gif"; //将静态图替换为动图
 
 //随机时间后,将动态图替换为随机点数的图片
 var timer = setTimeout(function(){ 
  $("dice").src = "img/dice_" + rand(1,6) + ".png";
  oPlay = true; //执行完毕后,再打开开关
 },rand(500,3000));
 }
}

CSS样式部分如下:

作者最新文章