基于事件在JS中以随机定时间隔自动滚动

时间:2017-05-18 02:16:02

标签: javascript jquery ajax

我正在编写一个滚动和扩展的Chrome扩展程序侦听新添加的子节点到父节点。

然后等待一段随机时间,如果添加更多子项则再次向下滚动,如果在接下来的5秒内没有通过ajax显示任何内容(例如,当结果列表已用完时),则停止。

我的问题是我应该如何处理每个事件滚动反应之间的等待可变时间量。

我希望它能礼貌地工作(如果一次加载所有50个元素并且生成的卷轴不足以到达下一个ajax加载点,则可以向下滚动)。

我应该考虑这个想法或方法吗? (这是一个完全良性的用例btw)

1 个答案:

答案 0 :(得分:0)

一个好的解决方案有点棘手,但完全有效:

var canPoll = true;  
var timeout = ... whatever ...; // if we want an absolute timeout
var startTime = (new Date()).getTime();

function randomWait(t) {
   // ... waits a random period of time
}

function isDone() {
   // ... check if done. returns boolean
}

function complete() {
   // ... run when everything is done
}

(function recursive() {
    // check for our absolute walltime timeout
    canPoll = ((new Date).getTime() - startTime) <= timeout;

    // check other conditions too
    if (!fn() && canPoll)  {
        // repeat!
        setTimeout(recursive, randomWait(interval));
    } else {
        // we're done
        complete();
    }
})();

改编自this wonderful answer