Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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循环期间强制重新绘制_Javascript_Html - Fatal编程技术网

在Javascript循环期间强制重新绘制

在Javascript循环期间强制重新绘制,javascript,html,Javascript,Html,我想在Javascript循环期间强制重新绘制。例如: var s = document.getElementById("foo"); for (var i = 0; i < 10000; i++) s.innerText = i + " times"; var s=document.getElementById(“foo”); 对于(变量i=0;i在循环结束时,我想显示一个弹出窗口,如果超时触发,那么标准弹出窗口阻止程序会将其隐藏,因为它不再由用户启动。我对此不太确定。我从不使

我想在Javascript循环期间强制重新绘制。例如:

var s = document.getElementById("foo");
for (var i = 0; i < 10000; i++)
    s.innerText = i + " times";
var s=document.getElementById(“foo”);
对于(变量i=0;i<10000;i++)
s、 innerText=i+“次”;
这将在最后更新,但我希望观察每个中间步骤。对此问题的常见响应是使用
setTimeout
,但是,有三个原因是不可接受的:

  • 页面上还有其他按钮/链接等,重要的是在循环运行时不能单击这些按钮/链接
  • 在循环结束时,我想显示一个弹出窗口,如果超时触发,那么标准弹出窗口阻止程序将隐藏它,因为它不再由用户启动
  • 如果用户在循环运行时单击,我希望该单击被缓冲,直到循环完成,而不是在循环中途触发

有没有办法强制浏览器重新绘制?

不过,这恐怕是您唯一的解决方案,因为中间的不可重新绘制对于提高浏览器渲染速度非常重要

也许你能在那些你不想触发的点击事件中管理缓冲区me标志吗?或者最好说一个不缓冲我的旗帜


我希望它能有所帮助,祝你好运。

>在循环结束时,我想显示一个弹出窗口,如果超时触发,那么标准弹出窗口阻止程序会将其隐藏,因为它不再由用户启动。我对此不太确定。我从不使用settimeout打开弹出窗口,但几乎每次浏览器停止弹出窗口时,如果弹出窗口是直接响应用户操作(即单击)打开的,则通常是允许的。如果您启动它是为了响应其他内容,那么通常是不允许的。“有没有办法强迫浏览器重新绘制?”我不这么认为。您的
setTimeout
的第一个和第三个问题似乎是可以解决的。不确定第二个。@amnotiam是我能看到的第一个解决方案(它在我的控制下),第三个不是真的可以解决的-我必须捕获并“重放”所有的点击等。@NeilMitchell:你可以让你的处理程序知道异步循环,并使循环代码能够注册在循环期间单击的其他处理程序提供的事件处理程序,然后在循环完成时调用它们。