在 JavaScript 运行之前重新绘制 CSS(以显示进度指示器)
Repaint CSS before JavaScript runs (to show progress indicator)
我有一个JS例程(由用户触发),可能需要一些时间才能完成。在例程运行时,我想在屏幕上显示进度叠加。下面是调用例程的代码(调用此例程是为了响应单击事件):
function handleClick() {
$('div#progressOverlay').removeClass('hidden');
myBigRoutine();
...
$('div#progressOverlay').addClass('hidden');
}
类切换会触发opacity
和visibility
的更改(使用过渡进行动画处理)。
类更改本身工作正常;第一个在慢速例程之前执行,第二个在其他所有内容之后执行。
问题是#progressOverlay
的视觉外观直到myBigRoutine()
完成后才会改变。
结果是进度叠加在屏幕上闪烁一瞬间,然后立即再次隐藏(全部没有动画)
有没有办法强制视觉更新/重绘发生在大型 JavaScript 例程之前(或者更好的是,与大型 JavaScript 例程并行发生?
可以将事件绑定到动画完成。因此,当动画完成时,只有这样您的代码才会执行,
function handleClick() {
$('div#progressOverlay').removeClass('hidden');
}
$("div#progressOverlay").bind("animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd", function(){
myBigRoutine();
...
$('div#progressOverlay').addClass('hidden');
});
我希望,这就是你需要:)
myBigRoutine()
函数应该异步调用。
function handleClick() {
$('div#progressOverlay').removeClass('hidden');
setTimeout(function() {
myBigRoutine();
...
$('div#progressOverlay').addClass('hidden');
}, 150);
}
150 是一个幻数,表示超时延迟(以毫秒为单位)。它可以是任何小数字。
此外,请考虑使用 .hide()
和 .show()
jQuery 方法,而不是hidden
类。
相关文章:
- 无法使用Javascript和CSS显示/隐藏
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 使用 JavaScript 和 CSS 显示图像
- CSS显示会影响jQuery/Javascript
- 脚本点击Css显示属性更改不正常运行Asp.net
- 使用css显示和隐藏元素不起作用
- Pandoc将HTML导出到带有CSS显示的Word:没有不起作用
- 使用CSS显示所有字符的内容可编辑单行
- 为什么javascript+CSS显示设置会使单选按钮不受欢迎
- 使用Javascript,如何在不同的HTML页面上更改CSS显示属性
- 使用 jQuery/CSS 显示/隐藏选定的表单
- CSS 显示属性不起作用
- 如何使用 JavaScript 更改 CSS 显示属性
- 通过图像和 CSS 显示背景网格
- 单击按钮时,使用 css 显示图像
- Jquery移动页面在使用css显示图像后消失
- 使用 CSS 显示隐藏项
- 当 CSS 显示“无要阻止”时,对象标记将重新加载
- 为什么我的 css 显示不规则
- 过滤器:第 n 个子项忽略 css 显示为无的位置