网站首页 > 教程分享 正文
window.setTimeout与window.setInterval
概念:window.setTimeout()是一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。返回一个 timerID。window.setInterval()是一个间断执行的定时器,可以叫间隔器,是重复调用一个函数或执行一个代码段,在每次调用之间具有固定的时间延迟。返回一个 intervalID。通过clearTimeout与clearInterval可以分别清除定时器和间隔器,从而停止执行。
使用方式:
setTimeout (表达式, 延时时间)
setInterval(表达式, 交互时间)
延时时间/交互时间是以豪秒为单位的(1000ms=1s)
两者区别:
setTimeout()方法是在等待指定时间后执行函数内容, 且只执行一次传入的表达式。
setInterval()方法是每指定间隔时间后执行一次传入的表达式,循环执行直至关闭窗口或clearInterval()。
setTimeout用于延迟执行:
let x = 1;
setTimeout(() => x++, 0);
console.log(x);
若在控制台输出,也就是异步调用时会获得2
setInterval用于间隔执行:
let x = 1;
var interval1 = setInterval(() => x++, 1000);
console.log(x);
若异步调用时,每个1秒会发现x增1
下面是一些例子,如果能你能理解其中的意思,那么就可以说会用了。
1. 简单例子
let a = 1;
let timerId = setTimeout(function() {
a++;
console.log('inner:', a);
},0);
console.log('outer:', a);
2. 延迟执行
let i = 0;
while(i < 10) {
setTimeout(function() {
console.log(i);
}, 1);
i++;
}
3 .串行改并行执行
let data = [];
for(let i = 0; i <= 999; i++) {
data[i] = {
number: Math.random()
}
};
for (let item of data) {
console.time();
setTimeout(function() {
item.number += 1;
}, 0);
setTimeout(function() {
item.id = 'id:' + item.number;
}, 0);
console.timeEnd();
}
// 当数据操作步骤太复杂,步数太多时,可以让一些操作异步来执行,这样浏览器不至于阻塞于此而卡死,可以把同步变异步延迟下计算,这样可以解决复杂运算问题。也可以利用Promise来实现类似功能
4. 移开浮层关闭
ele.addEventListener('click', function() {
setTimeout(
function() {
$ele.hide();
}
, 500)
}, false);
// 这是延迟执行与DOM结合的例子,不想让事件执行后马上得到结果,而是延迟一段时间之后执行。
4. DOM动画
var interval2 = setInterval(function() {
if (ele.style.left < screen.width) {
ele.style.left = ele.style.left + 10 + 'px';
} else { clearInterval(interval2); }
}, 20);
// JS做动画就离不开定时器和间隔执行器。相比来讲,动画用间隔较好,但是要记住满足条件后清除掉间隔器。
// 这里只是示例用法,真实动画需要自己微调
5. 测验题,结合作用域,看下你能回答正确并能说出结果以及顺序的原因来吗?
test1:
function callback(a){
return function(){
alert("Hello " + a);
}
}
let a = "world";
setTimeout(callback(a), 1000);
a = "你好";
test2:
function callback(a){
return function(){
alert("Hello " + a);
}
}
let a = "world";
setTimeout(function() {
callback(a)();
}, 1000);
a = "你好";
如果你都能回答正确,那么setTimeout与setInterval用法就全掌握了哦。
猜你喜欢
- 2024-09-10 JavaScript 定时器和延时器(js定时器执行顺序)
- 2024-09-10 彻底搞懂HTTP协议 - 天天造轮子(http协议的工作原理)
- 2024-09-10 导航栏案例:用到缓动函数(缓动类型)
- 2024-09-10 打字效果的文字制作(打字效果视频)
- 2024-09-10 Vue实战088:简单的验证码倒计时功能实现
- 2024-09-10 微信小程序开发(2):猜拳游戏全过程详解
- 2024-09-10 用多了各种组件库的你还会用原生JS写轮播图吗?
- 2024-09-10 canvas绘制图片并实现一个图片放大器
- 2024-09-10 Window 对象(window对象的子对象)
- 2024-09-10 微信刷屏的「给我一面国旗」怎么才能做到,技术原理是什么?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)