【Javascript学习笔记】【js线程实战— —实现随机速度的打字机效果】
2018-08-01 16:45
573 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。(github:KuanG97) https://blog.csdn.net/m0_37136491/article/details/81333603
引用到的知识点
利用事件触发线程
随机数
实战代码Download
快捷链接
setTimeout(表延时时间)在执行时,是在载入后延迟指定时间后只去执行一次表达式,
而setInterval(表交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式
同理拓展例子:
Math.random()*10取0-10随机数(包括一大堆小数点)
Math.random()*10+1取1-10随机数
Math.random()*10+2取2-10随机数
Math.random()*899+100取100-999随机数
其中常用:
目录
随机速度的打字机效果
效果
代码
html部分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>typeWriter</title> <style type="text/css"> h2,h5,#tooltipMsg,p{ white-space: nowrap; } td{ border: 1px solid #ccc; height: 50px; text-align: center; font-size: 10pt; padding: 2px; } </style> </head> <body> <h2>实现打字机效果</h2> <p id="typeWriterEffect"></p> <p id="typeWriterEffect2"></p> <script type="text/javascript" src="typeWriter.js"></script> </body> </html>
js部分
window.onload=function(){ var twArr = [],//打字的数据库队列 twing = false,//用于判断打字机的线程是否开启 twID = [],//打字机线程ID twTime = 10,//用于定时调用的时间 obj1 = document.getElementById("typeWriterEffect"), obj2 = document.getElementById("typeWriterEffect2"), twEffect = function(e,str){//添加显示的元素 twArr.push({ "context":e,//目标元素上下文 "str":str,//显示的元素 "lening":0,//截取的进度 "maxL":str.length//最大的进度 }) }, closeTw = function(){//关闭定时调用 clearTimeout(twID);//关闭线程 twing = true; }, twUi = function(){//定时调用 var i = 0, L = twArr.length, eing = null; for (var i = 0; i < L; i++) { eing = twArr[i]//效果同时加载多对象数组 eing.lening++; if (eing.lening>eing.maxL) {//不设置关闭线程则打字效果循环 eing.lening = 0; } eing.context.innerHTML = eing.str.substring(0,eing.lening)+"_"; } var num = Math.floor(Math.random()*50+1);//1-50个随机数 console.log(num); twID = setTimeout(twUi,num*twTime);//开启线程 if(twID==eing.maxL){//到达最后关闭线程 closeTw(); } }, //开启定时调用,参数为设置定时调用的时间 startTw = function (twTime) { if (!twing) {//如果没有开启才开启 twTime = twTime; twUi();//开始定时调用 } }; //设置内容对象数组 twEffect(obj1,"这就是打字机效果,打字速度随机哦!!!!!"); //开始调用线程 startTw(twTime); }
引用到的知识点
线程
js的单线程(single threaded)和异步(asynchronous)的,但是并不互相矛盾,js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式使得js具备了异步的属性。
setTimeout(function(){ console.log(time is out); },50);
有的人就会问到定时器
setTimeout和
setinterval的区别:
setTimeout(表延时时间)在执行时,是在载入后延迟指定时间后只去执行一次表达式,
而setInterval(表交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式
利用定时器触发线程
(缺点:耦合度高)
function f1(callback){ setTimeout(function(){ // f1 的代码 callback(); },0); } f1(f2);
利用事件触发线程
(缺点:可以通过绑定不同的事件,实现不同的回调函数,如果应用这种方法过多,不利于阅读程序)
$f1.on('custom',f2); //这里绑定事件以jQuery写法为例 function f1(){ setTimeout(function(){ // f1的代码 $f1.trigger('custom'); },0); }
随机数
Math.random()取0-1随机数
同理拓展例子:
Math.random()*10取0-10随机数(包括一大堆小数点)
Math.random()*10+1取1-10随机数
Math.random()*10+2取2-10随机数
Math.random()*899+100取100-999随机数
其中常用:
Math.floor()只取随机数整数部分
实战代码Download
(github:KuanG97) 下载实战代码 ClickHere》
快捷链接
全部React学习笔记的目录 Click Here>>
全部Javascript学习笔记的目录 Click Here>>
Less学习笔记 Click Here>>
安利一波前端开发推荐使用的工具 Click Here>>
github各类实战练习源码下载 Click Here>>
如果你觉得我的东西能帮到你,无限欢迎给我的github库点个收藏Star~0v 0~
相关文章推荐
- 学习笔记之js实现图片轮播效果
- 自定义属性之图片切换实例——初始化、实现切换效果——JS学习笔记2015-5-29(第42天)
- Javascript学习笔记2.3 Javascript与DOM实现动态表格效果
- JS学习笔记1——不要使用JavaScript内置的parseInt()和Number()函数,利用map和reduce操作实现一个string2int()函数
- JavaScript学习笔记之js实现复选框checkbox的全选、反选示例
- js的小案例的实现效果学习笔记
- 【js学习笔记-075】-----客户端javascript线程模型
- JS DOM编程艺术——用JS实现动画效果—— JS学习笔记2015-7-21(第88天)
- JavaScript学习——使用JS实现首页轮播图效果
- JS DOM编程艺术——用JS实现动画效果—— JS学习笔记2015-7-22(第89天)
- CSS学习笔记-附加篇( CSS+JS实现的选项卡效果(html组件))
- JavaScript学习笔记10--用js实现的拼图游戏
- JavaSE--学习实战完全笔记--增强版的线程创建方式--实现Callable接口
- js实现图片轮播效果学习笔记
- JavaScript DOM编程艺术 学习笔记(十)用JavaScript实现动画效果
- js实现页面loading效果_JavaScript
- [WPF] Felix 的线程学习笔记(二)——从WPF入手,实现简单的多线程
- 学习笔记---Javascript - DOM 及 简版JS二级联动
- JavaScript学习笔记(一)—— JavaScript实现