Javascript 长时间运行脚本上的屏幕拦截器

Javascript 长时间运行脚本上的屏幕拦截器,javascript,jquery,jquery-events,Javascript,Jquery,Jquery Events,我有一个简单的html页面,其中包含一个包含2000多行的大表。我编写了jQuery代码,用于在该表中进行搜索和排序。搜索和排序需要相当长的时间(这是可以理解的) 我想要的是在脚本搜索或排序表时有一个屏幕拦截器。这种行为在许多网站上的AJAX调用中都可以观察到,这些调用可以通过实现jQuery的onAjaxBegin和onAjaxComplete事件来实现 有没有这样的方法可以用来为长时间运行的脚本设置屏幕拦截器。如果没有,还有什么选择?jQuery将阻止元素或页面,并且非常可自定义。我建议将其

我有一个简单的html页面,其中包含一个包含2000多行的大表。我编写了jQuery代码,用于在该表中进行搜索和排序。搜索和排序需要相当长的时间(这是可以理解的)

我想要的是在脚本搜索或排序表时有一个屏幕拦截器。这种行为在许多网站上的AJAX调用中都可以观察到,这些调用可以通过实现jQuery的
onAjaxBegin
onAjaxComplete
事件来实现


有没有这样的方法可以用来为长时间运行的脚本设置屏幕拦截器。如果没有,还有什么选择?

jQuery将阻止元素或页面,并且非常可自定义。

我建议将其分解并使用setTimeout进行迭代

例如,而不是:

function example1() {
    for (var i = 0; i < 1000; i++) {
        // SOME CODE
    }
}
函数示例1(){
对于(变量i=0;i<1000;i++){
//一些代码
}
}
你可以写:

function example2() {
    var i = 0;
    helper();
    function helper() {
        // SOME CODE
        if (++i < 1000) {
            setTimeout(helper, 0);
        }
    }
}
函数示例2(){
var i=0;
助手();
函数助手(){
//一些代码
如果(++i<1000){
setTimeout(helper,0);
}
}
}
您不必在不同的回调中进行每次迭代。您可以将一个函数调用中的1000次迭代转换为100个函数调用中的每个函数调用中的10次迭代,或者转换为最适合您的情况。这样做的目的是不要长时间阻塞用户界面,以至于用户会注意到

另一个想法是,如果可以的话,可以使用Web Workers,但这在旧浏览器上不起作用(如果您正在编写浏览器扩展,或者您知道用户将使用什么,那么这对您来说可能是个问题,也可能不是个问题,等等)


如果按照问题中所述的方式进行操作,那么在计算过程中,浏览器将完全失去响应,很可能会触发“慢速脚本-是否要终止它?”之类的警告。

这是一个好主意。我一定会试试看