javascript - 耗时的 DOM 绘制

标签 javascript performance dom

当用户按下按钮时,数百万字的文本将通过更改样式表来重新格式化。这需要几秒钟。我想在用户按下按钮后立即显示带有消息“请稍候”的 div。我知道我可以通过更改 setTimeout 函数中的时间表来做到这一点。但随后我需要将超时设置得足够大以确保显示消息。还有其他解决方案吗?所以现在我得到了:

displayMessage();
setTimeout(changeStylesheet,100);

最佳答案

使用 keyup 和 keydown 这两个事件来协调更改。

http://jsfiddle.net/adrianjmartin/RB9Qz/11/

<style>
    div#msg { position:fixed;background:orange;top:0;height:auto;width:100% ;display:none}
</style>

<style id="styleA">

     div#msg { display:block}
    div{ width:100px;height:100px;background:red;margin:5px;}
</style>

<style id="styleB" >  
    div{background:orange;display:inline}
</style>

<div id="msg">Please Wait</div>

<div id="a">a</div>
<div id="b">b</div>
<div id="a">a</div>
<div id="b">b</div>
<div id="a">a</div>
//...etc...to slow it down!

Javascript

window.addEventListener( "showDialog" , function(){
 showMsg();
 });


document.addEventListener("keydown", function(){
  window.dispatchEvent( new CustomEvent("showDialog", {
    details:{ time:new Date() },
    bubbles: true,
    cancelable:true}));

  });

document.addEventListener("keyup", function(){
    changeStylesheet();
});

function showMsg(){
     var ss = document.getElementById("styleB");
    if(!ss.disabled){
        document.getElementById("msg").style.display="block";
    }

}

function changeStylesheet(){
   var ss = document.getElementById("styleB");
   ss.disabled = !ss.disabled;

    hideMsg();

}

function hideMsg(){
   document.getElementById("msg").style.display="none";
}

关于javascript - 耗时的 DOM 绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18911381/

相关文章:

performance - 为什么 SSE 指令保留 YMM 寄存器的高 128 位?

c++ - 使用什么数据结构来快速存储文本文件,其中有变量号。行数和变量号子元素的快速,在 C++ 中?

javascript - 如何保持被调用的函数直到 document.body 未返回完整

javascript - jquery-mobile css 不适用于使用 javascript 生成的 html

javascript - 将多个链接href设置为特定链接jquery

c++ - Graphviz 的性能

javascript - JS window.onload 用法与文档

java - 如何使用 DOM 解析器从 XML 文件中读取注释

javascript - 为什么有一个禁用 Javascript 的选项?

javascript - 为什么我不能生成随机数?