用前端三件套写一个抽奖器

本文介绍了一个基于HTML、JavaScript和XLSX的抽奖程序,通过读取Excel文件中的名单进行随机抽奖,展示了文件读取、数据解析及动态网页更新的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!doctype html>
<HTML>  
<HEAD>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">  
</HEAD>  

<BODY>  
<div>  
<h1>谁是幸运儿!?</h3>  
<div id="control">
    <h2 id="result" style="color:firebrick;">^_^</h1>  
    <div id="demo" style="color:firebrick"></div>
    <INPUT TYPE="button" VALUE="开始" id="btnBegin" ONCLICK="begin();" >   
    <INPUT TYPE="button" VALUE="结束" id="btnEnd" ONCLICK="end();">  
    <INPUT type="file" VALUE="选择文件" style="color:goldenrod" onchange="importf(this)">
</div>
<div id="resultList" style="text-align:center"></div></div><div style="clear:both; float:none"></div>
<br>
</div>  
</BODY>  
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
<script type="text/javascript" src="js/xlsx.core.min.js"></script>
<style type="text/css">
h1{
    background: #EEE url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAHklEQVQImWNkYGBgYGD4//8/A5wF5SBYyAr+//8PAPOCFO0Q2zq7AAAAAElFTkSuQmCC) repeat;
    text-shadow: 5px -5px black, 4px -4px white;
    font-weight: bold;
    -webkit-text-fill-color:#D67573;
    -webkit-background-clip: text;
}
body{
    background-image:  url("img/img.jpg");
    font-size:60px;
    text-align:center;
}
#resultList div{  
    float:left; border:1px solid #006699; color: #123456; width:200px; height:100px; line-height:100px;  
    margin-right:15px; text-align:center;  
}  

input{
    border-radius:20px;
    width:170px;
    height:70px;
    font-size:40px;
    color: goldenrod;
}
</style>
 <TITLE>谁是幸运儿</TITLE>  
 <SCRIPT LANGUAGE="JavaScript">  
var names = []; 
/*
FileReader共有4种读取方法:
1.readAsArrayBuffer(file):将文件读取为ArrayBuffer。
2.readAsBinaryString(file):将文件读取为二进制字符串
3.readAsDataURL(file):将文件读取为Data URL
4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8'
                */
var wb;//读取完成的数据
var rABS = false; //是否将文件读取为二进制字符串
var name;//中奖人
var index = -1;
var time;  
document.getElementById("btnBegin").disabled = true;
function importf(obj) {//导入
    if(!obj.files) {
        alert("幸运儿名单格式不正确");
        return;
    }
    var f = obj.files[0];
    var reader = new FileReader();
    reader.onload = function(e) {
        names =null;
        var data = e.target.result;
        if(rABS) {
            wb = XLSX.read(btoa(fixdata(data)), {//手动转化
                type: 'base64'
            });
        } else {
            wb = XLSX.read(data, {
                type: 'binary'
            });
        }
        window.onerror = function(e) { 
            alert("获取不到幸运儿名单,请检查文件")
        } 
        //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
        //wb.Sheets[Sheet名]获取第一个Sheet的数据;
        var name = wb.SheetNames[0];
        var mycars = XLSX.utils.sheet_to_json(wb.Sheets[name]);
        console.log(mycars);
        names = new Array(mycars.length);
        for(var index = 0;index < mycars.length;index++){
            names[index] = mycars[index].name;
        }        
        console.log(names);
        document.getElementById("demo").innerHTML= "共有"+names.length+"个幸运儿,请开始抽奖";
    };
    if(rABS) {
        reader.readAsArrayBuffer(f);
    } else {
        reader.readAsBinaryString(f);
    }
    document.getElementById("btnBegin").disabled = false;
}

function fixdata(data) { //文件流转BinaryString
    var o = "",
        l = 0,
        w = 10240;
    for(; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
    return o;
}

function begin(){  
document.getElementById("btnBegin").disabled = true;  
document.getElementById("btnEnd").disabled = false;  
chouqian();  
}  
function chouqian(){
    if(names.length > 0){  
        index = Math.floor(Math.random()*1000 % names.length);  
        name = names[index];  
        document.getElementById("result").innerHTML = name;  

        time = window.setTimeout(chouqian,2);  
    }else {
        alert("没有下一个幸运儿了~")
        document.getElementById("result").innerHTML = "~结束~";  
    }
}  
function end(){
    if(names.length > 0){
        window.clearTimeout(time);  
        document.getElementById("btnBegin").disabled = false; 
        document.getElementById("btnEnd").disabled = true; 
        names.splice(index, 1);
        var div = document.createElement("div");  
        div.innerHTML = name;  
        document.getElementById("resultList").appendChild(div);
        document.getElementById("demo").innerHTML= "剩下"+names.length+"个幸运儿";
    }else if(names.length = 0){
        document.getElementById("demo").innerHTML= "";
        alert("没有下一个幸运儿了~")
    }else{
        alert("请选择幸运儿名单")
    }
} 
 </SCRIPT>  
</HTML>

运行截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值