Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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 显示IE中循环长时间运行的进度条_Javascript_Jquery_Settimeout_Jquery Ui Progressbar - Fatal编程技术网

Javascript 显示IE中循环长时间运行的进度条

Javascript 显示IE中循环长时间运行的进度条,javascript,jquery,settimeout,jquery-ui-progressbar,Javascript,Jquery,Settimeout,Jquery Ui Progressbar,我有一个JSON数组,大约有2000条记录,我需要构建一个表来显示这些记录中的数据。由于它有大量数据,处理过程可能会导致浏览器冻结。因此,我被要求显示一个进度条,指示进度。Javascript是单线程的,我必须使用Setinterval来显示进度。但是在IE版本中进度显示不正确,这取决于数组中记录的数量。 请帮忙 变量g_arr=['A','B','C','D','E','F','g','H']; $btn.clickfunction{ var回路=1000; $tbl t车身总成拆卸; $d

我有一个JSON数组,大约有2000条记录,我需要构建一个表来显示这些记录中的数据。由于它有大量数据,处理过程可能会导致浏览器冻结。因此,我被要求显示一个进度条,指示进度。Javascript是单线程的,我必须使用Setinterval来显示进度。但是在IE版本中进度显示不正确,这取决于数组中记录的数量。 请帮忙

变量g_arr=['A','B','C','D','E','F','g','H']; $btn.clickfunction{ var回路=1000; $tbl t车身总成拆卸; $divProgress.progressbar{ 数值:0 }; //window.setTimeoutfunction{ 对于变量i=0;i有几件事你做错了:

在执行DOM操作时避免长for循环,因为这非常昂贵。 改用。请求动画帧 基本上指示浏览器希望执行动画 或者浏览器调用 在下次重新绘制之前指定函数。换句话说,它就像 for循环,但每个循环迭代仅在浏览器 决定什么时候可以画画。 您正在创建1000个不必要的 $divProgress对象。使用缓存。创建一个 $progressBar,然后使用1000次。$tbl tbody被创建1000次也有同样的问题。 您正在创建1000个 进度条插件实例。你的做法是: $progressBar.progressBar{value:i/Loop*100}是一个 构造函数,该构造函数创建具有此值的新进度条实例。 使用setter,而不是构造函数: $progressBar.progressbarvalue,i/Loop*100。 变量g_arr=['A','B','C','D','E','F','g','H']; $btn.clickfunction{ var i=0, 循环=1000, $progressBar=$divProgress, $body=$tbl T车身, 请求动画帧= window.requestAnimationFrame|| window.mozRequestAnimationFrame|| window.webkitRequestAnimationFrame|| window.msRequestAnimationFrame, doRequestFrame=函数{ 如果i++<循环{ $progressBar.progressbarvalue,i/Loop*100; var$newRow=$; $.eachg_arr,函数索引,val{ $newRow.append$.appendval; }; $body.append$newRow; 如果请求AnimationFrame{ //嘿,浏览器,请在空闲时再次调用doRequestFrame,然后重新绘制 请求动画框架或请求框架; }否则{ setTimeoutdoRequestFrame,1; } } }; $tbl t车身总成拆卸; $progressBar.progressBar{ 数值:0 }; //嘿,浏览器,请在空闲时调用doRequestFrame,然后重新绘制 requestAnimationFrame?RequestAnimationFramedRequestFrame:dRequestFrame; }; 运输署, th, 桌子{ 边框颜色:黑色; 边界宽度:薄; 边框样式:实心; 边界塌陷:塌陷; } 专栏1 专栏2 第3栏 专栏4 专栏5 第6栏 专栏7 专栏8
我对大量数据也有同样的问题,对我来说最好的解决方法就是简单地显示加载。。。而不是一些动画加载器,因为它们被卡住了起初我想放置一个加载gif…但它也被卡住了无论如何汤姆你的建议很感激,那将是我最后的尝试你也可以通过增加百分比使它更动态:加载。。。10%,但这也会被卡住,所以你会看到从10跳到40等等,但这确实会让它变得更大dynamic@Noval请检查我的更新以支持IE9及以下版本。如果您关心兼容性,我不会使用requestAnimationFrame。所有其他观点都是正确的Hi Jose,无论如何,谢谢你指出错误,我会纠正的..但回到进度问题,我看到了requestAnimationFrame
只适用于IE 9+versions@Tom请检查我的更新。如果不支持requestAnimationFrame,则应使用优雅降级,然后按常规方式使用。感谢Jose u刚刚节省了时间。我将doRequestFrame函数中的requestAnimationFrame替换为window.setTimeoutdoRequestFrame,0。。。。现在它在所有版本的IE@Noval很好,但是如果浏览器支持requestAnimationFrame,就让它使用它,正如您在我的代码示例中看到的那样。