首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript中的DoEvents

JavaScript中的DoEvents
EN

Stack Overflow用户
提问于 2011-04-12 04:00:19
回答 3查看 16.1K关注 0票数 7

我有以下几点:

代码语言:javascript
复制
$('body, a').addClass('cursor-wait');
for (var I=0, L = myArray.length; I < L; I++) {
   // tight loop here
}
$('body, a').removeClass('cursor-wait');

但我不确定光标:等待图标是否会立即出现。

问:有没有办法在JavaScript中告诉我"DoEvents“,这样我就知道DOM在进入循环之前正在更新?

也许可以使用setTimeout方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-12 04:20:28

下面是正在发生的事情:

处理页面的浏览器实例是单线程的。对DOM的更改会立即发生。但是,当您的脚本正在运行时,浏览器会被阻止,并且无法运行其布局管理器,该管理器会根据CSS类的更改来更新页面。您说得对,setTimeout是将控制权交给布局管理器并在屏幕上看到您的更改的最佳方式。您甚至不需要设置延迟,简单地调用setTimeout就可以让布局管理器有机会重新绘制页面。

代码语言:javascript
复制
$('body, a').addClass('cursor-wait');
setTimeout(function () {
    for (var I=0, L = myArray.length; I < L; I++) {
       // tight loop here
    }
    $('body, a').removeClass('cursor-wait');
});
票数 15
EN

Stack Overflow用户

发布于 2011-04-12 04:05:46

不需要这样做,addClass直接更改了DOM,所以当您的for循环运行时,已经添加了cursor-wait。

为什么要将cursor-wait添加到body标记和所有a标记?

票数 0
EN

Stack Overflow用户

发布于 2017-10-26 22:42:33

我找到了另一个解决方案:对于足够多的DOM更新,可以使用window.scrollBy(0, 1);将页面滚动到1像素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5626828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档