javascript - 动画在 FF 和 IE 上卡住,但在 Chrome 上不会

标签 javascript angularjs css cross-browser css-animations

我的应用程序中有一个加载旋转动画,当执行大量 js 时,该动画在 FF 和 IE 中保持卡住,但当执行大量 js 时,它在 chrome 中运行良好。

我做了一个plunker来演示这个问题。由于在不同浏览器上的性能不同,我做了三个不同的。它们之间的唯一区别是重复的元素数量。不确定它是否也取决于计算机,在这种情况下,也许您可​​以更改元素数量以获得较小的性能影响。

在此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 执行”,但这可能需要一段时间,而且最好立即有一个适当的加载旋转器。

谢谢

最佳答案

这是预期的行为,这就是浏览器在单线程中进行渲染的方式。 Chrome(准确地说是 Webkit 浏览器)在这方面有所不同,这就是它们通常被称为“快速”和“响应式”的原因。 This article总结一下。

您可能希望将 CPU 密集型任务委托(delegate)给 Web Worker。

关于javascript - 动画在 FF 和 IE 上卡住,但在 Chrome 上不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32697533/

相关文章:

javascript - Tensorflow.js SymbolicTensor 不被接受为输入

javascript - Webpack 5 实时重载

javascript - 通过 JS Laravel 访问存储目录

javascript - Angular 库的 DefinelyTyped 与 index.d.ts

html - 向空的 div 添加背景 - 指定不可能的高度

jquery - 让网页成为绝对的

jquery - .animate 不适用于 .mouseenter/leave 事件?

javascript - JOI - 验证复杂对象

angularjs - 如何在 mvc5 中使用 angular-google-maps 绘制多边形

javascript - angular ng-model 不适用于输入类型 = 复选框