动画在FF和IE上冻结,但不是Chrome

时间:2015-09-21 14:16:52

标签: javascript angularjs css3 cross-browser css-animations

我的应用程序中有一个加载微调器动画,当它执行大量的js执行时会在FF和IE中保持冻结,但是当执行大量的js执行时,它在chrome中运行正常。

我已经成为了一名能够证明这个问题的人。由于不同浏览器的性能不同,我做了三个不同的。它们之间的唯一区别是重复的项目数量。不确定它是否也依赖于计算机,在这种情况下,您可以更改项目数以获得较小的性能。

在这个Chrome version中,当我重新填充列表时,微调器动画一直在旋转,即使你可以看到在更新ng-repeat之前需要一段时间。

在此FireFox versionIE version中,当重新填充列表时,微调器会停止动画。

css:

.spinner-container {
  position: absolute;
  top: 40%;
  left: 50%;
}

#preloader {
  margin: 0 auto;
  font-size: 10px;
  position: relative;
  text-indent: -9999em;
  border-top: 1.1em solid red;
  border-right: 1.1em solid red;
  border-bottom: 1.1em solid red;
  border-left: 1.1em solid green;
  -webkit-animation: load8 1.1s infinite linear;
  animation: load8 1.1s infinite linear;
}
#preloader,
#preloader:after {
  border-radius: 50%;
  width: 80px;
  height: 80px;
}
@-webkit-keyframes load8 {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@keyframes load8 {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

有谁知道为什么会这样,也许是解决方案?

当然,我们会尝试重构"重js执行"但这可能需要一段时间,如果有一个适当的加载微调器就会很好。

感谢

1 个答案:

答案 0 :(得分:2)

这是预期的行为,这是浏览器在单个线程中进行渲染的方式。 Chrome(准确地说是Webkit浏览器)以这种方式不同,这就是他们通常被称为“快速'并且'响应'。 This article总结了这一点。

您可能希望将CPU密集型任务委派给Web worker。