css動畫是否會被js阻塞

css動畫是否會被js阻塞

  • css的動畫部分是會被js阻塞的,不過transform的動畫則不會受影響。

下面舉一個margin-left移動的動畫下,啓動js阻塞動畫的性能圖表css

<style>
.walkabout-old-school {
  animation: 3s slide-margin linear infinite;
}
 
@keyframes slide-margin {
  from {margin-left: 0;}
  50% {margin-left: 100%;}
  to {margin-left: 0;}
}
</style>
<script>
function kill() {
  var start = +new Date;
  while (+new Date - start < 2000){}
}
</script>

css動畫是否會被js阻塞圖片2
上圖在運行kill方法以後明顯能夠看到動畫停滯了2s後才繼續。
css動畫是否會被js阻塞圖4html

  • 由上圖能夠看到啓用js的2s內,渲染進程會等到kill函數執行完成後才執行,再看下面這張圖,能夠看出margin的變化會致使dom從新佈局,而佈局會等kill函數執行完成後纔開始。就會致使
    css動畫是否會被js阻塞圖片3

而後再看看使用了transform做爲動畫的元素dom

.walkabout-new-school {
  animation: 3s slide-transform linear infinite;
}
@keyframes slide-transform {
  from {transform: translatex(0);}
  50% {transform: translatex(300px);}
  to {transform: translatex(0);}
}

下圖是運行對比圖(藍色爲margin,綠色爲transform)
css動畫是否會被js阻塞圖片4ide

從上圖看出使用了transform的徹底不受kill方法的影響,再來看下調試的圖表
css動畫是否會被js阻塞圖5函數

這裏能夠看出margin會頻繁觸發頁面的重排,而transform是不會的,而js阻塞了頁面重排。因此margin的動畫會卡住。佈局

  • 因此在平時使用動畫時,多用transform能夠讓頁面性能和效果達到最佳。
相關文章
相關標籤/搜索