为什么 JavaScript 在这里阻止 UI 更新(通过 jquery)
Why is JavaScript blocking the ui update (via jquery) here?
在此代码中,为什么 css 更改直到 while 循环完成才完成?我知道一个循环会挂起浏览器,但我认为 css 更改将是同步的,因此在 while 循环开始之前完成。
奖励问题:有什么方法可以让我在移动到 while 循环之前完成 css 更改而不放弃对 javascript 线程的控制?
function run() {
var then = +new Date()
, now
;
$('#mydiv').css('display','block');
now = + new Date();
while (now - then < 5000) {
now = +new Date();
}
}
小提琴:http://jsfiddle.net/ezVZT/2/
浏览器并不总是立即更新页面。他们通常会等待渲染但不绘制的更新,而脚本执行并批量处理所有重绘。
在您的代码中,您正在对样式进行更改,但随后执行一个 5 秒的循环,这将阻止所有内容。CSS 更改只需要等待。
如果您需要等待五秒钟才能执行某些操作,请使用 setTimeout() 调用,或者由于您使用的是 jQuery,请查看.delay()
。
像$elem.addClass('xyz')这样的东西能解决你的问题吗? 然后,您可以在 CSS 中将显示:块分配给您的类。也许那会更快?
尝试以下代码。它可能会起作用。
function run() {
var then = +new Date()
, now
;
$('#mydiv').css('display','block');
$("#mydiv", window.parent.document).load($("mydiv").html());
now = + new Date();
while (now - then < 5000) {
now = +new Date();
}
}
function reset() {
$('#mydiv').css('display','none');
}
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 通过JQuery重定向到另一个页面
- 通过jquery设置最小高度
- 通过jQuery添加ng样式属性,angular不更新
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- 是否可以仅通过jQuery将图像替换为用户动态选择的另一个图像
- 如何通过JQuery修改样式属性
- 如何通过Jquery从具有相同名称但不同索引的输入中获取所有值
- 如何通过jQuery发送选定的元素和文本输入
- 通过Jquery根据下拉列表中的选择禁用数字字段
- 提交按钮通过JQuery和JavaScript函数所做的更改不会持续
- 通过jQuery插入HTML不起作用
- UIWebview赢得't通过基本身份验证加载动态加载的资源(通过jQuery mobile)
- 通过jQuery设置转换值
- 无法通过JQuery更改图像的src
- 通过jQuery函数将拉丁数字更改为波斯数字并添加逗号
- 通过JQuery将字符串转换为JSON
- 如何通过JQuery触发JS原生甚至addEventListener(“change”,函数)
- 通过Jquery更改html5中的视频(不同质量)文件
- 如何通过jQuery选中所有复选框并在单击一个复选框时取消选择