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

Animation freezes on FF an IE but not Chrome

本文关键字:Chrome IE 冻结 FF 动画      更新时间:2023-09-26

我的应用程序中有一个加载旋转器动画,当它执行重js时,在FF和IE中一直冻结,但在chrome中运行良好,当执行重js时。

我做了一个活塞来演示这个问题。由于在不同浏览器上的性能不同,我做了三个不同的。它们之间唯一的区别是重复项目的数量。不确定它是否也依赖于计算机,在这种情况下,也许你可以改变项目的数量来获得一个小的性能影响。

在这个Chrome版本中,当我重新填充列表时,spinner动画一直在旋转,即使你可以看到它需要一段时间才能更新ng-repeat。

在这个FireFox版本和IE版本中,当列表被重新填充时,微调器会停止动画。

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浏览器)在这方面有所不同,这就是为什么它们通常被称为"快速"answers"响应"的原因。本文对此进行了总结。

你可能想把cpu密集型任务委派给web worker。