Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中基于事件以随机时间间隔自动滚动_Javascript_Jquery_Ajax - Fatal编程技术网

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

Javascript 在JS中基于事件以随机时间间隔自动滚动,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在编写一个Chrome扩展,它可以滚动并侦听新添加的子节点到父节点 然后,它会随机等待一段时间,如果添加了更多的子项,它会再次向下滚动,如果在接下来的5秒钟内没有通过ajax显示任何内容(例如,当结果列表已用尽时),它会停止 我的问题是,我应该如何处理每个事件之间的等待时间 我希望它能有礼貌地工作(但如果同时加载了所有50个元素,并且生成的滚动不足以到达下一个ajax加载点,那么就不能向下滚动) 我有什么想法或方法来考虑这个问题吗?(顺便说一句,这是一个完全良性的用例)一个好的解决方案有点棘

我正在编写一个Chrome扩展,它可以滚动并侦听新添加的子节点到父节点

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

我的问题是,我应该如何处理每个事件之间的等待时间

我希望它能有礼貌地工作(但如果同时加载了所有50个元素,并且生成的滚动不足以到达下一个ajax加载点,那么就不能向下滚动)


我有什么想法或方法来考虑这个问题吗?(顺便说一句,这是一个完全良性的用例)

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

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();
    }
})();
var canPoll=true;
变量超时=。。。不管怎样…;//如果我们想要一个绝对超时
var startTime=(新日期()).getTime();
函数随机等待(t){
//…随机等待一段时间
}
函数isDone(){
//…检查是否完成。返回布尔值
}
函数完成(){
//…一切完成后再运行
}
(函数递归(){
//检查我们的绝对墙时间超时

canPoll=((新日期).getTime()-startTime)一个好的解决方案有点棘手,但完全有效:

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();
    }
})();
var canPoll=true;
var timeout=…无论什么…;//如果我们想要一个绝对超时
var startTime=(新日期()).getTime();
函数随机等待(t){
//…随机等待一段时间
}
函数isDone(){
//…检查是否完成。返回布尔值
}
函数完成(){
//…一切完成后再运行
}
(函数递归(){
//检查我们的绝对墙时间超时
canPoll=((新日期).getTime()-startTime)为什么不
setTimeout()
clearTimeout()
?为什么不
setTimeout()
clearTimeout()