【发布时间】:2012-11-20 05:25:03
【问题描述】:
我正在尝试在 JavaScript 的 非常 密集时期创建一个加载栏,其中构建和填充了一些非常重的 3d 数组。在用户单击按钮之前,此加载栏需要保持空白。
冻结发生无论是否我正在使用-webkit-transition(这个应用程序可以是chrome独有的,在我的情况下不需要跨浏览器)。
寻求简单我已经建立了这样的酒吧......
<div id="loader">
<div id="thumb">
</div>
</div>
...然后试图在我的主要for 循环的各个阶段增加该条:
for(i = 0; i < 5 ; i++){
document.getElementById('thumb').style.width = i*25 + '%';
//More Code
}
问题是在 JavaScript 完成之前一切都会冻结。 我在 Stack Overflow 上发现了一个类似的问题,Using CSS animation while javascript computes,并在 cmets 中找到并考虑和/或尝试了以下内容:
-
网络工作者
不要认为它会起作用,因为我的脚本正在用对象和构造函数填充数组,其中包含根据this site 不起作用的函数
-
jQuery
不是一个选项,我不能在我的应用程序中使用外部库 - 在任何情况下,仅为加载栏导入整个库似乎有点矫枉过正......
-
关键帧
这是有希望的,我试过了,但最后它也冻结了,所以不高兴
-
timeOut()s想过这个,但既然加载栏的目的是减少挫败感,增加等待时间似乎适得其反
我很乐意在这个阶段有任何条增量,即使它不平滑!我很确定这不仅仅是我一个人遇到的问题 - 也许有人有一个有趣的解决方案?
P.S.:我将其作为一个新问题发布,而不是添加到引用的问题中,因为我专门寻求有关 JavaScript(而不是 jQuery)的帮助,并且如果我可以使用转换(! =动画)在宽度上。
【问题讨论】:
-
您可以将您的工作分成几部分,并通过超时将这些部分链接在一起。 (在一个片段结束时,安排运行下一个片段的超时。)这允许浏览器在每个片段之间运行动画。
-
正如@RaymondChen 所指出的,您不使用
window.setTimeout(…)的理由并不合理。该方法不让其余代码(或用户)等待;它会安排代码供以后执行。 -
谢谢,但我不需要添加延迟吗?据我所知,延迟 0 不会给过渡时间......正如问题中提到的,让用户等待更多似乎适得其反......
-
延迟 10ms .. 甚至 5ms 怎么样?几乎不引人注意?试试看!!
-
这可能只是一个 typeo,但
setTimeout(createMap(), 50)将执行该函数并将结果分配给 setTimeout,这可能不是您想要的。它应该类似于:setTimeout(createMap, 50).
标签: javascript css-transitions