javascript 如何实现程序休眠?

javascript 如何实现程序休眠?,第1张

1. jquery的$.delay()方法

设置一个延时来推迟执行队列中之后的项目。这个方法不能取代JS原生的setTimeout。

The .delay() method is best for delaying between queued jQuery effects. Because it is limited—it doesn't, for example, offer a way to cancel the delay—.delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.

例子:在.slideUp() 和 .fadeIn()之间延时800毫秒。

HTML 代码:

<div id="foo /">

jQuery 代码:

$('#foo').slideUp(300).delay(800).fadeIn(400)

2. 通过循环消耗cpu

function sleep(n) {

var start = new Date().getTime()

while(true) if(new Date().getTime()-start >n) break

}

3. 用setTimeout。

假设有三个步骤,步骤之间需要暂停一段时间;可以采用如下的方法:

function firstStep() {

//do something

setTimeout("secondStep()", 1000)

}

function secondStep() {

//do something

setTimeout("thirdStep()", 1000)

}

function thirdStep() {

//do something

}

使用调用自定义函数的方式消耗时间:

function sleep(numberMillis) {

var now = new Date()

var exitTime = now.getTime() + numberMillis

while (true) {

now = new Date()

if (now.getTime() >exitTime)

return

}

}

在js中,是没有睡眠这个概率的。

因为js语句是自上而下执行的,这样语句一触发,就会接着往小执行其他的代码,不会等着语句执行完毕。

所有,你这里需要的这个"睡眠",就算存在,那也只是延迟了for循环里面的代码的"执行",并不会延迟for本身的执行,我这里说的"延迟了for循环里面的代码的执行",是for循环内部的语句,一次性执行for所循环的次数次(这里可能有点难明白,比如for执行10次,延迟3秒,那for里面的代码会在延迟3秒后,一次性执行10次)。

如果要达到这个要求,就需要模拟"睡眠",使用定时器(setInterval)或者延时器(setTimeout):

//lst:需要循环的集合,timer:需要延迟的时间(单位:S)

function for_Interva(lst,timer){

    var index=0

    var Intertimer=setInterval(function(){

        // *** 作集合中第lst[index]个

        //集合小标+1

        index+=1

        //判断index是否达到集合最后一个

        if(index>=lst.length){

        //如果达到了,就清除定时器,停止循环

          clearInterval(Intertimer)

        }

    },timer)

}

function for_ITimeout(lst,timer){

       var index=0

       function timeoutfor(){

           // *** 作集合中第lst[index]个

            //集合小标+1

            index+=1

            //判断index是否达到集合最后一个

            if(index<lst.length){

            //没有达标,就继续循环。达标后,不会进入此if

                Timeout(function(){

                    timeoutfor()

                },timer)

            }

       }

    Timeout(function(){

            timeoutfor()

    },timer)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11291866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存