JS 定时器问题

JavaScript07

JS 定时器问题,第1张

setTImeout第一个参数必须是一个可执行的函数,你第二副图传的是一个表达式,是没有返回值的。

可以有如下写法:

1、你的第一种写法

2、setTimeout(handle, 1000)

function handle() {location.href=xxx}

3、setTimeout(()=>location.href=xxx)

不准的原因是,setTimeout 是一个异步任务,在执行到 setTimeout 的时候,js 引擎不会立刻把定时任务放到事件循环的任务队列中,而是等待时间到了,再放进事件循环的队列中。

注意,是时间到了才加入队列,那么如果队列中已经有了其他的任务要执行,这个新加的定时器任务自然要等待前面的任务结束,所以时间会延后。

我们只能尽量调整延后的时间偏差,不能修正到完全精确,代码如下

// performance.now 比 Date.now 更精确

let startTime = performance.now()

// count表示定时器被调用的次数,次数需要是全局变量

let count = 0

function myTimeout(){

let runTime = performance.now()

// 先增加次数

++count

// diffTime 就是已经延后的时间

let diffTime = (runTime - (startTime + count * 1000))

// 既然已经延后了,就需要时间间隔,减去已经拖延的时间,提前开始

setTimeout(myTimeout, 1000 - diffTime)

}

let t = setTimeout(myTimeout , 1000)

js中setTimeout定时器不准的原因,以及修正的办法

首先,需要一个定时器,可以使用JS中的setTimeout() 方法。

其次,实现DIV消失,有很多种办法,可以使用$("#div").css('display','none'),通过设置DIV的display属性为none实现隐藏,也可以使用Jquery中hide()方法实现隐藏,还可以使用remove()移除DIV来实现DIV的消失。

下面是使用css(),setTimeout() 两个方法实现2秒后自动消失的完整代码:

扩展资料:

clearTimeout()用于重置js定时器,如果你希望阻止setTimeout的运行,就可以使用clearTimeout方法。

例如,如果想手动点击按钮停止DIV消失,代码可以这样写:

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>实现DIV2秒后就自动消失</title>

<script src="__JS__/jquery.min.js"></script>

</head>

<body>

<div id="div">

这是DIV里的内容

</div>

<a id="stop" onclick="stop()"/>点击停止消失</a>

<script>

var timer

$(function () {

timer=setTimeout(function () {

$("#div").css('display','none')

}, 2000)

})

function stop(){

clearTimeout(timer)

}

</script>

</body>

</html>