javascript - 在 JavaScript 运行之前重绘 CSS(以显示进度指示器)

标签 javascript css graphics repaint

我有一个 JS 例程(由用户触发)可能需要一些时间才能完成。在例程运行时,我想在屏幕上显示进度叠加层。下面是调用例程的代码(这是为响应点击事件而调用的):

function handleClick() {
    $('div#progressOverlay').removeClass('hidden');
    myBigRoutine();
    ...
    $('div#progressOverlay').addClass('hidden');
}

类切换会触发 opacityvisibility 的更改(带有过渡动画)。

类更改本身运行良好;第一个在慢例程之前执行,第二个在其他所有内容之后执行。

问题是 #progressOverlay 的视觉外观在 myBigRoutine() 完成后才会改变。
结果是进度叠加层在屏幕上闪烁了一秒钟,然后立即再次隐藏(全部没有动画)

有没有办法强制视觉更新/重绘发生在大型 JavaScript 例程之前(或者,更好的是,与之并行)?

最佳答案

您可以将事件绑定(bind)到动画完成。所以,当动画结束时,只有那时你的代码才会执行​​,

function handleClick() {
    $('div#progressOverlay').removeClass('hidden');

}

$("div#progressOverlay").bind("animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd", function(){
    myBigRoutine();
    ...
    $('div#progressOverlay').addClass('hidden');
});

我希望,这就是您所需要的:)

关于javascript - 在 JavaScript 运行之前重绘 CSS(以显示进度指示器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763893/

相关文章:

jquery 显示和隐藏不能正常工作

javascript - 用 JS 改变 margin-left

java - 如何在图像上附加文本时添加高度元素

java - 有什么方法可以让我的 JFrame 居中吗?

javascript - Rails 3. 链接到 javascript 文件中的图像在生产中不起作用

javascript - firewatch 视差效果与上面的另一个 div 和内容

html - 导航菜单不居中

javascript - 将 Canvas 内容序列化到 ArrayBuffer 并再次反序列化

java - 如何将Controller类中的request.getParameter(string)与MySQL数据库进行比较?

java - 从 GridView 中删除填充并使用整个 View 来放置项目