记录一个有关offsetWidth的怪异问题

版权声明:可任意转载,转载注明出处。 https://blog.csdn.net/Handsome_fan/article/details/80963689

offsetWidth 是什么?从外形上来看,它和width很像,其实offsetWidth是取得一个DOM对象的border + padding + width的和。果然是和width属性是有关联的啊。
我们认识了offsetWidth后,看一下以下的代码,看看offsetWidth返回的值是什么。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8"/>
  <title>offsetWidth的怪异问题</title>
  <style>
    .img-wrap {
      width: 520px;
      height: 280px;
      position: relative;
      margin: 100px auto 0;
      border: 1px solid #F00;
    }

    .img-wrap ul {
      position: absolute;
      left: 0;
      top: 0;
      margin: 0;
      padding: 0;
    }

    .img-wrap ul li {
      list-style: none;
      float: left;
    }

    .img-wrap ul li img {
      display: block; /* 消除img的魔鬼间距 */
    }
  </style>
</head>
<body>
<div class="img-wrap">
  <ul>
    <li><img src="./image/aa.webp"/></li>
    <li><img src="./image/bb.jpg"/></li>
    <li><img src="./image/cc.jpg"/></li>
    <li><img src="./image/ee.webp"/></li>
  </ul>
</div>
<script>
  var oImgWrap = document.querySelector('.img-wrap');
  var oUl = document.querySelector('ul');
  var aLi = oUl.getElementsByTagName('li');
  var aWidth = aLi[0].offsetWidth;
  console.log(aWidth);// 输出的值是什么?
  console.log(oUl.offsetWidth); // 输出的值是什么?
</script>
</body>
</html>

这里我要补充说明的是,代码中引入的图片的规格都是520 * 280的(单位:px)。所以以上代码输出的值是什么?520吗?很让人意外的是输出的是0。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8"/>
  <title>幻灯片</title>
  <style>
    .img-wrap {
      width: 520px;
      height: 280px;
      position: relative;
      margin: 100px auto 0;
      border: 1px solid #F00;
    }

    .img-wrap ul {
      position: absolute;
      left: 0;
      top: 0;
      margin: 0;
      padding: 0;
    }

    .img-wrap ul li {
      list-style: none;
      float: left;
    }

    .img-wrap ul li img {
      display: block; /* 消除img的魔鬼间距 */
    }
  </style>
</head>
<body>
<div class="img-wrap">
  <ul>
    <li><img src="./image/aa.webp"/></li>
    <li><img src="./image/bb.jpg"/></li>
    <li><img src="./image/cc.jpg"/></li>
    <li><img src="./image/ee.webp"/></li>
  </ul>
</div>
<script>
window.onload = function () {
  var oImgWrap = document.querySelector('.img-wrap');  
  var oUl = document.querySelector('ul');
  var aLi = oUl.getElementsByTagName('li');
  var aWidth = aLi[0].offsetWidth;
  console.log(aWidth); // 520
  console.log(oUl.offsetWidth);// 520
}
</script>
</body>
</html>

这段代码比上段代码多出了一句window.onload = function () {},这句话的作用是当文档内容或者图片加载完毕后再执行里面的代码,我们发现offsetWidth的值被正确的获取到了,可是按照我的理解,最初的那段代码的js是放在最后面的,按道理来说,执行输出offsetWidth值得时候,文档和图片都应该是加载完毕了的,不应该会出现获取不到offsetWidth值得情况呀。这种怪异的现象先记录在此,以后写代码的时候尽量要写上window.onload = function() {}

猜你喜欢

转载自blog.csdn.net/Handsome_fan/article/details/80963689