如何使用原生Js实现随机点名详解


Posted in Javascript onJanuary 06, 2021

使用原生Js实现随机点名

最近学了一点前端内容,老师让用js设计一个班里的随机点名器。就尝试写了一个,具体实现效果如图:

如何使用原生Js实现随机点名详解

实现代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>点名</title>
  <link href="../callTheRoll/bootstrap-3.3.7-dist/css/bootstrap.min.css" type="text/css" rel="stylesheet">

</head>
<style>
  div {
    float: left;
  }
  
  button {
    background-color: moccasin;
    margin: 30px;
    height: 50px;
    width: 150px;
    border: rgb(245, 165, 165) 1px solid;
    font-size: 18px;
  }
  
  .wai {
    margin-left: 200px;
    width: 1300px;
  }
  
  .name {
    height: 40px;
    width: 100px;
    margin: 4px;
    padding: 10px;
    font-size: 18px;
    background-color: mistyrose;
  }
</style>

<!-- onload : 事件会在页面或图像加载完成后立即发生。 -->
<body onload="A()">
  <div class="wai" align="center">
    <table>
      <button class="start" onclick="start()">开始</button>
      <button class="end" onclick="end()">结束</button>
    </table>
    <div id="names"></div>
  </div>

  <script type="text/javascript">
    var nameArr = [
      "空", "张家家", "许雪雪", "王橘橘", "陈韵", "马本本", "张志志", "唐豪豪", "高洋洋", "朱阳阳", "王山山", "空",
      "尹方方", "王零零", "李远远", "吴杰", "李玉玉", "李雯雯", "步一一", "崔明明", "肖金金", "陈晴晴", "赵飞飞", "空",
      "李英英", "李洋阳", "刘俊郡", "王泊", "廉云云", "王子俊", "康三三", "李浩浩", "张艺艺", "徐叶叶", "李宏宏", "雷康康",
      "张青青", "王乐乐", "空", "杨童童", "张君君", "孙明", "何龙龙", "郑轩轩", "任平平", "孙超超", "空", "贺涛涛",
      "空", "空", "空", "空", "熊秀秀", "薄嘉嘉", "薛万万", "尹飞", "张杰", "胡万万", "空", "马文文"
    ];
    var index = 0;
    var k = 1; // 记录不为空的座位

    // 生成作为表
    function A() {
      for (var i = 0; i < nameArr.length; i++) {
        if (nameArr[i].length > 1) {
          // 创建div标签(html元素)
          var div = document.createElement("div");
          div.setAttribute("class", "name");
          div.setAttribute("id", index++ + "");
          var text = document.createTextNode(nameArr[i]);
          div.appendChild(text);
          // 添加元素
          document.getElementById("names").appendChild(div);

          // 每排12人,所以每隔12,添加一个换行符
          if ((i + 1) % 12 == 0) {
            var br = document.createElement("br");
            document.getElementById("names").appendChild(br);
          }
          k++; // 添加一个学生,k自增1,记录学生(不为空的座位)个数
        } else {
          var div = document.createElement("div");
          div.setAttribute("class", "name");

          // div.setAttribute("id", index++ + "");
          // 如果当前元素长度小于等于1时,则代表当前座位为空,所以不给当前div添加id属性,方便后续随机选人时,避开空座位

          var text = document.createTextNode(nameArr[i]);
          div.appendChild(text);
          // 添加元素
          document.getElementById("names").appendChild(div);
          if ((i + 1) % 12 == 0) {
            var br = document.createElement("br");
            document.getElementById("names").appendChild(br);
          }
        }

      }
    }

    // 定义一个id标志
    var index2 = -1;

    function restore() {
      // 还原颜色
      if (index2 != -1) {
        document.getElementById(index2 + "").style.cssText = "background: mistyrose";
      }
      // 生成随机数,用K生成随机数,此时K代表不为空的作为个数
      var num = Math.floor(Math.random() * k);
      document.getElementById(num + "").style.cssText = "background-color:red";
      index2 = num; // 记录当前被选中的id,在下次执行该函数时,将颜色还原
    }

    var time; // 用于接收计时器,方便关计时器时操作
    var n = 1; // 定义状态正在执行 n=0 , 已经结束 n=1

    function start() {
      if (n == 1) {
        // DOM setInterval()方法 计时器
        time = setInterval("restore()", 80);
        n = 0;
      }
    }

    function end() {
      if (n == 0) {
        clearInterval(time);
        alert("请" + document.getElementById(index2 + "").innerHTML + "同学回答问题");
        n = 1;
      }
    }
  </script>
</body>

</html>

在这里对计时器做一下介绍:

setInterval(code,millisec),这两个参数都是必须的;
			第一个参数是要调用的函数或要执行的代码串。
			第二个参数是毫秒值,表示的是隔多久执行一次code(参数一)。
	clearInterval(id_of_setinterval),参数是必须的;
			这个参数表示setInterval返回的ID值,即在代码中我设置的time

(本人是小白一个,所以写的有什么问题也请各位指出,可以让我及时改正,谢谢)

总结

到此这篇关于如何使用原生Js实现随机点名的文章就介绍到这了,更多相关原生Js实现随机点名内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript的对话框详解与参数
Mar 08 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
Jun 24 Javascript
js滚轮事件兼容性问题需要注意哪些
Nov 15 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 Javascript
JS canvas绘制五子棋的棋盘
May 28 Javascript
vue模仿网易云音乐的单页面应用
Apr 24 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
Vue实现简单计算器案例
Feb 25 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
JS前端轻量fabric.js系列之画布初始化
Aug 05 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
Jan 06 #Javascript
JavaScript 中的六种循环方法
Jan 06 #Javascript
JavaScript的一些小技巧分享
Jan 06 #Javascript
详解Vue2的diff算法
Jan 06 #Vue.js
如何利用JavaScript编写一个格斗小游戏
Jan 06 #Javascript
vuex的使用步骤
Jan 06 #Vue.js
一篇文章看懂JavaScript中的回调
Jan 05 #Javascript
You might like
php遍历目录viewDir函数
2009/12/15 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
javascript常见操作汇总
2014/09/03 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
python FTP编程基础入门
2021/02/27 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
精彩自我鉴定
2014/01/16 职场文书
店面销售职位的职责
2014/03/09 职场文书
乒乓球比赛通知
2015/04/27 职场文书
在校生证明
2015/06/17 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书