定时器的工作原理,这里将用引用How JavaScript Timers Work中的例子来解释定时器的工作原理,该图为一个简单版的原理图。·

上图中,左侧数字代表时间,单位毫秒;左侧文字代表某一个操作完成后,浏览器去询问当前队列中存在哪些正在等待执行的操作;蓝色方块表示正在执行的代码块;右侧文字代表在代码运行过程中,出现哪些异步事件。该图大致流程如下:

程序开始时,有一个JS代码块开始执行,执行时长约为18ms,在执行过程中有3个异步事件触发,其中包括一个setTimeout、鼠标点击事件、setInterval

第一个setTimeout先运行,延迟时间为10ms,稍后鼠标事件出现,浏览器在事件队列中插入点击的回调函数,稍后setInterval运行,10ms到达之后,setTimeout向事件队列中插入setTimeout的回调

当第一个代码块执行完成后,浏览器查看队列中有哪些事件在等待,他取出排在队列最前面的代码来执行

在浏览器处理鼠标点击回调时,setInterval再次检查到到达延迟时间,他将再次向事件队列中插入一个interval的回调,以后每隔指定的延迟时间之后都会向队列中插入一个回调

后面浏览器将在执行完当前队头的代码之后,将再次取出目前队头的事件来执行

这里只是对定时器的原理做一个简单版的描述,实际的处理过程比这个复杂。

下面我们利用定时器实现一个简单的随机点名功能,代码如下:

Document

div{width: 300px;height: 100px;margin: 20px auto;font-size: 50px;text-align: center;line-height: 100px;}

#btn{width: 200px;height: 40px;margin: 10px auto;background: red;color: #FFFFFF;font-size: 20px;text-align: center;cursor: pointer;display: block;}

请点击按钮

var ocontent = document.getElementById("content");

var obtn = document.getElementById("btn");

var onoff = 1; //打开

var timer = null; //设置全局变量

var str = ["亚瑟","鬼谷子","铠","橘右京","项羽","梦奇","白起","赵云","李白","韩信","刘备","鲁班七号","墨子","孙膑","周瑜","庄周","廉颇","程咬金","典韦","后羿","扁鹊","李元芳","张飞","刘禅","兰陵王","达摩","曹操","钟馗","高渐离","宫本武藏","吕布","嬴政","姜子牙","老夫子","狄仁杰","夏侯惇","关羽","哪吒","太乙真人","干将莫邪","成吉思汗","牛魔","百里守约","百里玄策","苏烈","黄忠","诸葛亮","东皇太一","杨戬","后羿","孙悟空","张良","韩信","刘邦","达摩","马可波罗","娜可露露","露娜","妲己","甄姬","虞姬","大乔","小乔","王昭君","貂蝉","芈月","阿珂","花木兰","武则天","不知火舞","孙尚香","蔡文姬","安琪拉","钟无艳","女蜗","雅典娜","艾琳"]

obtn.onclick = function(){

if(onoff == 1){ //开始随机点名

clearInterval(timer);//避免重复点击按钮出现bug

timer = setInterval(function(){

var randomNum = Math.round(Math.random()*(str.length-1))

ocontent.innerHTML = str[randomNum];

},10)

onoff = 0; //"定位"到暂停功能

obtn.value = "就是你了"

}else if(onoff == 0){

clearInterval(timer);

onoff = 1; //暂停后需恢复到重新开始的功能

obtn.value = "继续"

}

}

效果截图如下:

这个随机点名功能实现起来相对容易,利用了定时器,设置了一个开关来控制开始和暂停。

另外我在另一篇随笔中用定时器写了一个倒计时功能,实现原理和这个类似,关键的两个点是定时器和开关,(相比较而言,开关更难理解)附上地址:https://www.cnblogs.com/qiaowanze/p/11399260.html

原生JS实现简易评论更新功能

...

原生JS实现简易轮播图

原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = funct ...

原生JS实现简易转盘抽奖

我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述H ...

原生JS实现图片预览功能

html代码:

...

js javascript 简易随机值穿插加解密【原】

适用场景 本方法适用于需要对敏感信息进行加密传输,但加解密要求又不高的场景,因为是前台的javascript加解密,所以其实还是能通过js代码分析出原始值来的. 如果您对信息极其敏感, 比例登录密码这 ...

原生JS制作简易Tabs组件

js html转盘点名,原生JS实现简易随机点名功能相关推荐

  1. js 控制鼠标_原生js实现改变视频播放速率

    前言:前几天考研成绩刚刚出来,有人欢喜有人悲,不管结果怎么样,只要努力过,就不存在遗憾一说.大家都知道考研复习的时候会有大量的时间用来看教学视频,就比如说"张宇高数"等等.考研复习 ...

  2. php上js实现ajax请求,原生JS如何实现Ajax通过POST方式与PHP进行交互的方法

    原生JS如何实现Ajax通过POST方式与PHP进行交互的方法 发布时间:2021-04-20 11:28:22 来源:亿速云 阅读:52 作者:小新 这篇文章将为大家详细讲解有关原生JS如何实现Aj ...

  3. 原生JS那些事:原生JS添加和删除class类名

    2019独角兽企业重金招聘Python工程师标准>>> 如何使用原生js给一个节点添加和删除class名? 由于我们一直习惯于使用jQ封装好的方法,偶尔项目中也会用原生js,这就要了 ...

  4. JS 九宫格算法 用原生js实现

    九宫格算法核心: 利用控件索引index计算出控件所在的行数和列数: 利用控件计算出left距离: 利用控件计算出top距离: 写特效时需要用到定位 公式: 行 row=parseInt(i/cols ...

  5. js php排序表格,原生JS实现表格排序

    最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点:call方法使用 sort方法深 ...

  6. js html颜色代码,原生js编写的浏览器安全色网页拾色器色盘 生成颜色代码

    原生js编写的浏览器安全色网页拾色器 by js.alixixi.com #abc-colorPicker .colorPick-close,#filter-colorPicker .colorPic ...

  7. 原生js怎么追加html,原生JS改变HTML内容

    最近发现总是把原生JS语法和诸多框架库神马的语法搞混,打算暂时弃用各种库,回归到原生来,好好抠一抠所有的细节,跳一跳各种坑,才能飞得更远.PS. 突然想起冰火里面三眼乌鸦对布兰说的那句话--You'l ...

  8. html中自动随机点名的程序,JavaScript实现随机点名程序

    本文实例为大家分享了js实现随机点名程序的具体代码,供大家参考,具体内容如下 效果: 录制的gif效果图没那么理想,其实速度是比这个快的 思路: 1.定义一个数组,存放名单 2.启动定时器,设定间隔时 ...

  9. 怎么用python制作随机点名软件_python写一个随机点名软件的实例

    最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...

最新文章

  1. 两个程序员的泰国普吉岛之行
  2. 元宵节就要到了,花灯要不要来一盏?3D的那种
  3. 2018年6月2号(线段树(2))
  4. ViewPager图片切换的简单案例
  5. HP 520 双系统 vista xp
  6. 关于程序员的办公室哲学
  7. Linux下配置DNS服务器之一--Master服务器
  8. JavaScript正则表达式语法与示例
  9. Delphi之virtual,dynamic,abstract
  10. MinGW编译wxWidget
  11. sqlserver数据库中char、varchar、text与nchar、nvarchar、ntext数据类型使用详解
  12. clover写入efi_Clover EFI bootloader for Mac(四叶草启动引导工具)
  13. 用python设计进销存_免费的进销存系统哪个好一些?
  14. world Best 500 interview exam
  15. Windows渗透与提权:技巧总结篇
  16. as常用固定搭配_初中英语常用固定搭配
  17. PHP 一一 微信公众号开发(二次开发)
  18. 如何抠图人像换背景?教你一个在线操作的方法
  19. Gulp项目报错:AssertionError [ERR_ASSERTION]: Task function must be specified
  20. ps顶级调色技术解密视频教程 终极大法

热门文章

  1. Qt Creator 2.8.1,qt4.8.5 需要含gcc4.4 的mingw
  2. php nginx错误,PHP/Nginx错误(Win)
  3. java linux 调用so文件,linux下java jni调用.so文件的方法
  4. 怎样上传php文件到云服务器地址,php文件怎么导入到云服务器
  5. python批量下载bilibili视频_如何批量下载bilibili的视频?
  6. php框架 mysql拼接操作_PHP对数据库MySQL的连接操作
  7. 压力测试和负载测试的区别/性能指标/专项测试/(tps/qps)
  8. 工作中遇到的问题——数据库
  9. matlab虚拟现实之V-Realm Builder2复制技巧(修改)
  10. java 中j= i_java中 i = i++和 j = i++ 的区别