我有一些需要处理的内容,需要花费几秒钟的时间,因此在处理过程中,我想添加一个视觉指示器。
.processing
{
background-color: #ff0000;
}
<div id="mydiv">
Processing
</div>
脚本:
$("#mydiv").addClass("processing");
// Do some long running processing
$("#mydiv").removeClass("processing");
我天真地认为这个类会被应用于div,UI会被更新。然而,在浏览器中运行时(至少在Firefox中),div从未被突出显示。有人能解释一下为什么我的div从未被突出显示吗?该类被添加,处理过程进行,然后删除该类;在此过程中未更新UI,用户从未看到红色背景。
我知道JS是单线程的,但我一直认为浏览器渲染会同步进行,随着DOM的更新而同步运行。我的假设是否不正确?
更重要的是,实现这种效果的推荐方法是什么?我必须使用setTimeout使缓慢处理异步化并使用回调吗?肯定有更好的方法,因为我在这里没有任何需要异步行为的需求;我只想刷新UI。
编辑:
JSFiddle:http://jsfiddle.net/SE8wD/5/ (注意,您可能需要调整循环迭代次数以在自己的PC上获得合理的延迟)
!important
。你确定类被添加了吗(你通过firebug检查过了吗),这个过程确实需要那么长时间吗?也许它发生得太快了。 - mas-designs