基于JavaScript实现简单抽奖功能代码实例
作者:函数茶馆时间:2026-10-23 22:48:34浏览:293
本文介绍如何使用JavaScript实现一个简单的网页抽奖功能。通过随机滚动显示抽取结果,点击按钮即可触发抽签逻辑。代码包含HTML结构、CSS样式及JS核心逻辑,支持自定义抽取内容列表,适合前端初学者参考学习。
抽奖功能实现概述
制作这个功能的初衷纯粹出于兴趣与娱乐。
灵感来源于此前班会课上的场景:当老师提问时,现场无人应答。
当时便设想,若通过抽签机制选中某人,对方是否仍会拒绝回答?当然,这仅是玩笑之语。
页面效果与交互说明
首先展示页面的最终视觉效果。

点击抽取按钮即可开始抽签,红色边框区域用于显示抽取结果(注:红色边框仅为示意,实际界面中并不存在)。
抽取过程的动态效果如下:文字会进行随机滚动,最终停止在某个结果上。

抽取列表中的具体内容可以根据实际需求进行替换和修改。
核心代码实现与注意事项
以下是完整的实现代码。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
*{margin: 0px;padding: 0px;}
li{list-style: none;}
body{
font-family: "楷体";
user-select:none;
background: url('1.jpg') no-repeat;
background-size: 100%;
/*background-color: red;*/
}
.section{
position: relative;
width:935px;
height: 460px;
background-color: rgba(0,0,0,.3);
margin:165px auto 0;
text-align: center;
}
.section h2{
height: 90px;
line-height: 90px;
font-size: 40px;
color:#fff;
}
.section .s-result{
height: 400px;
color: #fff;
}
.s-result .number{
float: left;
width: 895px;
height: 300px;
line-height: 300px;
margin-left: 20px;
font-size: 60px;
font-weight: bold;
}
.btn{
position:absolute;
left: 50%;
margin-left: -161px;
bottom: -40px;
width: 323px;
height: 81px;
border-radius: 30px;
background-color: #000;
cursor:pointer;
}
.btn p{
line-height: 81px;
font-size: 50px;
color: #fff;
}
</style>
</head>
<body>
<div class="section">
<h2>看看谁最幸运!!</h2>
<div class="s-result">
</div>
<div class="btn">
<p>点 击 抽 取</p>
</div>
</div>
<script>
var oBtn = document.getElementsByClassName('btn')[0];
var oResult = document.getElementsByClassName('s-result')[0];
var arrName = ['张三','李四','王五','赵六','李xx','杨xx','张xx','A_dmin']; //抽签的内容
var step = 1;
var cnt = 1;
var flag = true;
oBtn.onclick = function (){
if(flag){
step = 1;
creatName();
flag = false;
}else{
var d = document.getElementsByClassName('number')[0];
oResult.removeChild(d);
step = 1;
creatName();
}
}
function getName(){
var num = Math.floor(Math.random()*(arrName.length-1));
var n = arrName[num];
arrName.splice(num,1);
return n;
}
function creatName(){
if(step > cnt){
return null;
}
step++;
var oDiv = document.createElement('div');
oDiv.className = 'number';
oResult.appendChild(oDiv);
var dis = 1;
var maxDis = 30;
var mySet = setInterval(function(){
dis++;
if(dis > maxDis){
oDiv.innerHTML = getName();
clearInterval(mySet);
creatName();
return null;
}
oDiv.innerHTML = arrName[Math.floor(Math.random()*(arrName.length-1))];
},50);
}
</script>
</body>
</html>
注意事项:
该实现存在一个小瑕疵:允许用户多次点击,每次随机生成的结果均不相同。因此,当抽取内容列表为空时,页面会显示“undefined”,但这并不影响整体使用体验。
以上就是本文的全部内容,希望能为各位的学习提供些许帮助,同时也欢迎大家继续支持本站。
作者最新文章
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
