HTML+JS实现简单点名系统

前言:实现一个简单的点名系统

需求分析:

  1. 两个按钮实现随机点名的开始和结束(onclick()方法)
  2. 每一个名字需要放在一个单独的盒子中并被一个div所包裹,以便于统一格式(动态生成div)
  3. 当随机开始时,随机选取一条数据,并将该条数据所在的div背景颜色更改(random()函数获得随机数,setTimeout()重复调用)
  4. 随机结束时将当前的数据显示出来(alert())

下面开始实现

1.准备数据并编写HTML页面

将所有的数据放在一个数组中,便于后面根据角标随机选取数据

<button onclick="startF2()">开始</button>
<button onclick="endF2()">结束</button>
<div id="fa">

</div>
//JS中准备数据
//准备数据
var arr = ["1", "2", "3", "4", "5", "6"];
var index = -1; //标记被选中的块的id,下一次循环时将该块的背景改为原来的颜色
var time;

2.在页面加载时动态得将数据放在div中展示出来

需要用到onload()方法在页面加载时同时调用初始化数据的方法

function init() {
    //将数组显示在页面上
    for(var i = 0; i < arr.length; i++) {
        //获取父容器
        var fa = document.getElementById("fa");
        //创建小div
        var div = document.createElement("div");
        //设置id属性,方便寻找
        div.id = "id" + i;
        div.className = "box"; //方便给小div设置样式
        //设置小div中显示的内容
        div.innerHTML = arr[i];
        //将小div放在父容器中
        fa.appendChild(div);
    }

}

此时页面上应该可以将数据全部显示出来

3.编写点击按钮时触发的开始随机和结束随机的方法

开始随机方法

function nowfind() {			
    if(index != -1) {
        //将上一个选中的div的背景还原
        document.getElementById("id" + index).style.backgroundColor = "gray";
    }
    //随机数
    var num = Math.floor(Math.random() * arr.length);
    index = num; //记录被选中的div的id
    //获取对应的div
    var div = document.getElementById("id" + num);
    //设置背景颜色
    div.style.backgroundColor = "pink";
}

function startF2() {
    //调用计时器重复调用nowfind方法
    time = setInterval("nowfind()",100);//赋值给变量以便于关闭调用
}

nowfind()方法是实现一次随机获取,startF2()方法是利用setInterval()方法周期性得调用nowfind()方法

nowfind()中进行下一次循环的时候必须要将上一次选取的数据所在的div背景改变回来,否则最终会变成同一色.并且随机数的选取应该采用floor()方法向下取整

 

结束随机方法

function endF2() {
    //停止随机获取姓名
    clearInterval(time);
    alert("请"+arr[index]+"同学回答问题");
}

结束时将数据输出即可

点名系统实现.

效果如下:

随机前:

随机中:

随机结束:

 

完整代码如下:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            //准备数据
            var arr = ["1", "2", "3", "4", "5", "6"];
            var index = -1; //标记被选中的块的id,下一次循环时将该块的背景改为原来的颜色
            var time;
            function nowfind() {
				
                if(index != -1) {
                    //将上一个选中的div的背景还原
                    document.getElementById("id" + index).style.backgroundColor = "gray";
                }
                //随机数
                var num = Math.floor(Math.random() * arr.length);
                index = num; //记录被选中的div的id
                //获取对应的div
                var div = document.getElementById("id" + num);
                //设置背景颜色
                div.style.backgroundColor = "pink";
            }

            function startF2() {
                //调用计时器重复调用nowfind方法
                time = setInterval("nowfind()",100);//赋值给变量以便于关闭调用
            }

            function endF2() {
                //停止随机获取姓名
                clearInterval(time);
                alert("请"+arr[index]+"同学回答问题");
            }

            function init() {
                //将数组显示在页面上
                for(var i = 0; i < arr.length; i++) {
                    //获取父容器
                    var fa = document.getElementById("fa");
                    //创建小div
                    var div = document.createElement("div");
                    //设置id属性,方便寻找
                    div.id = "id" + i;
                    div.className = "box"; //方便给小div设置样式
                    //设置小div中显示的内容
                    div.innerHTML = arr[i];
                    //将小div放在父容器中
                    fa.appendChild(div);
                }

            }
        </script>
        <style type="text/css">
            .box {
                width: 100px;
                height: 50px;
                background-color: gray;
                text-align: center;
                line-height: 50px;
                margin: 10px;
                float: left;
            }
        </style>
    </head>

    <body onload="init()">
	<button onclick="startF2()">开始</button>
	<button onclick="endF2()">结束</button>
	<div id="fa">

	</div>
    </body>

</html>

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值