【发布时间】:2017-10-01 17:43:10
【问题描述】:
根据我自己的经验,并且与 this answer 一致,在 JavaScript 代码运行时不会更改 UI。
示例
当我单击“运行脚本”按钮时,我希望出现加载动画,然后我希望运行一些 JavaScript,当 JavaScript 完成运行时,我希望加载动画消失。我创建了a codepen here,它(可以预见地)失败了。最相关的代码部分是:
$('#run-script-btn').on('click', function() {
startLoading();
longLoadingScript(10000);
stopLoading();
});
startLoading() 更改 CSS 以显示加载器,但它实际上不会影响 UI,直到 JS 完成运行,此时会调用 stopLoading() - 所以基本上我们看不到加载图标。
我想出的解决方法是在longLoadingScript() 和stopLoading() 代码周围放置一个setTimeout(),以便让浏览器有时间在startLoading() 调用中实际影响UI。工作代码在a codepen here,相关部分如下所示:
$('#run-script-btn').on('click', function() {
startLoading();
setTimeout(function() {
longLoadingScript(10000);
stopLoading();
}, 100);
});
问题
这是一个好方法吗?是否有更好/更成熟的模式来处理这种情况?
【问题讨论】:
标签: javascript html css browser css-animations