關(guān)于使用transition修改height和transform的對比

1.修改height

修改元素的高度可能會導(dǎo)致子元素的大小也會變化,所以瀏覽器不得不進行relayout。在relayout之后主線程還需要重新生成元素的位圖

2.修改transform

CSS transform屬性并不會觸發(fā)當(dāng)前元素或附近元素的relayout

3.結(jié)果對比

3.1 生成兩萬個節(jié)點,進行動畫對比

  • height


    image.png
  • transform


    image.png

3.2 生成100個節(jié)點,進行動畫對比

  • height


    image.png
  • transform


    image.png

4.結(jié)論

在存在大量dom時,盡量用transfrom來修改dom大小,如果dom不多,可隨意選擇(這里牽涉到,transform在做動畫時,dom占據(jù)的空間不變,但是修改height時,dom占據(jù)的空間會變,根據(jù)ui需求進行選擇即可)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <title>Document</title>
  <style type="text/css">
  * {
    margin: 0;
    padding: 0;
  }

  div {
    width: 100%;
    height: 200px;
  }
  div:nth-of-type(3){
    transition: all .2s;
  }
  </style>
</head>

<body>
  <div></div>
  <script type="text/javascript">
  var html = ''
  for (var i = 0; i < 100; i++) {
    html += '<div id="div'+i+'" style="background:' + getRandomColor() + '"></div>'
  }
  document.querySelector('div').innerHTML = html

  function getRandomColor() {
    return '#' + (Math.random() * 0xffffff << 0).toString(16);
  }
  var div2=document.querySelector('#div2')
  function setHeight() {
    div2.style.height = Math.random()*200 + 'px'
    setTimeout(setHeight,1000)
  }
  setHeight()

  </script>
</body>

</html>

修改transform的,把setHeight改為setTransform即可

  function setTransform() {
    div2.style.transform = 'scale(' + Math.random() + ')' 
    setTimeout(setTransform,1000)
  }
  setTransform()

5.參考文檔

https://juejin.im/entry/5af415396fb9a07acc11bdc4?utm_source=gold_browser_extension

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容