javascript - 在 Javascript (jQuery) 完成之前更新 CSS

标签 javascript jquery css

我一直在阅读有关 javascript 的单线程性质以及 UI 如何在代码完成之前不会更新的信息(例如 this question )。对该问题的回答主要解释了代码是如何执行的,但没有提供一些“hacky”计时器之外的真正可行的解决方案。

我想知道是否有一个好的解决方案,可能包括 promise 或 .then() 功能,这些功能将在 javascript 执行之前“绘制”UI。

下面是一个具体的例子:http://jsfiddle.net/zbtsd12k/ .在此示例中,我希望“更改颜色”在运行计算之前立即更改。

警告:我的示例包含一个十亿次迭代的 for 循环(在我的机器上耗时 < 2 秒)并且可能会卡住您的计算机。

如有任何帮助,我们将不胜感激。

最佳答案

一些变化

  • 在“逻辑”周围添加了一个setTimeout,以便DOM 有机会重绘
  • 拆分 then(makeCalculations()) 行,因为 #1 updateClass() 不返回 promise ,而 #2 then(methodCall()) 将立即执行 methodCall,因为您将 () 放在它的末尾。

function updateClass(element, newClass) {
  element.addClass(newClass);
  return true;
};

function makeCalculations() {
  $("p").text("Running...");

  setTimeout(function() {
    var x = 0;
    for (var i = 0; i < 1000000000; i++) {
      x += i;
    }

    $("p").html("Done!" + "<br />" + "x = " + x);
  }, 10);
}

$(function() {

  $("button").click(function() {

    updateClass($("span"), "purple");
    makeCalculations();

  });

});
.purple {
  color: purple;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span>Change Color</span>
<br>
<button>Click Me</button>
<p>Click the button</p>

关于javascript - 在 Javascript (jQuery) 完成之前更新 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010425/

相关文章:

Javascript 变量显示未定义

javascript - Jquery $(窗口).scrollTop();方法是滚动到页面的特定位置,然后再次滚动到页面顶部?

javascript - 使用生成的 div 拖放 Vanilla JS

javascript - 根据 GET 的内容显示表单字段

javascript - 在 CKEditor 中添加单行换行符的按钮

jquery - Accordion 、Joomla 和 jQuery

javascript - 全页垂直幻灯片,如 apple.com/iphone-5c/

javascript - 有选择地更改类的 href

css - 按钮下方和右侧的线

html - Google 字体和 twitter bootstrap 3 : where should I load the fonts, 以及如何在 css 文件中使用它?