国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - 如何把setInterval的延時時間在每次執(zhí)行里面的代碼后成為一個隨機(jī)時間?
PHP中文網(wǎng)
PHP中文網(wǎng) 2017-04-10 18:07:25
0
3
877
        function flip(obj){
            obj.flip=setInterval(function(){
                var oTop=parseInt(getStyle(obj,'top'));
                oTop==0?doMove(obj,'top',10,-100):doMove(obj,'top',10,0);
            },Math.round(Math.random()*1000+1000))
        }

setInterval的時間我設(shè)置成了Math.round(Math.random()*1000+1000),這是一個隨機(jī)數(shù),每間隔這個隨機(jī)出來的時間后會執(zhí)行function里的代碼,但是這個隨機(jī)數(shù)一旦生成以后就不會再變了,那我應(yīng)該怎么再每次執(zhí)行里面的代碼后通過隨機(jī)的方式也把間隔時間也改掉呢?

PHP中文網(wǎng)
PHP中文網(wǎng)

認(rèn)證0級講師

reply all(3)
Ty80

1.setInterval被調(diào)用后,就會被加入到定時器執(zhí)行隊(duì)列中等待綁定的函數(shù)被執(zhí)行,也就是你設(shè)置的interval時間只會有效一次
2.想要實(shí)現(xiàn)你說的功能,請使用setTimeout函數(shù)

function flip(obj){
    var timeout=Math.round(Math.random()*1000+1000);
    clearTimeout(obj.flip);
    obj.flip=setTimeout(function timeoutFun(){
        var oTop=parseInt(getStyle(obj,'top'));
        oTop==0?doMove(obj,'top',10,-100):doMove(obj,'top',10,0);
        timeout=Math.round(Math.random()*1000+1000);
        obj.flip=setTimeout(timeoutFun,timeout);
    },timeout);
}
小葫蘆
function flip(obj){
            var timer = 0;//第一次隨便給個時間間隔
            obj.flip=setInterval(function(){
                var oTop=parseInt(getStyle(obj,'top'));
                oTop==0?doMove(obj,'top',10,-100):doMove(obj,'top',10,0);
                timer = Math.round(Math.random()*1000+1000);//后面每次執(zhí)行時都會重新生成一個時間間隔
            },timer)
        }
小葫蘆

稍微抽象一下:

function repeatJob(jobFunc, intervalGenerator) {
    var lastTime = 0;
    var interval = 0;
    var seed = 0;

    function loop() {
        var now = new Date();
        if(now - lastTime > interval) {
            lastTime = now;

            interval = intervalGenerator()
            jobFunc();
        }
        seed = requestAnimationFrame(loop)
    }

    return {
        start: function() {
            seed = requestAnimationFrame(loop)
        },
        stop: function() {
            cancelAnimationFrame(seed);
        }
    }
}

function intervalGenerator() {
    return Math.round(Math.random()*1000+1000);
}

function job() {
    console.log('this job repeats');
    var oTop=parseInt(getStyle(obj,'top'));
    oTop==0?doMove(obj,'top',10,-100):doMove(obj,'top',10,0);
}

var r = repeatJob(job, intervalGenerator);
r.start();
//r.stop();
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template