offset方法的BUG

本文探讨了CSS中offsetHeight属性的误解及其导致的高度变化问题,通过实例解释为何加上border会导致高度增加,并提供两种避免该问题的方法:使用行内样式和currentStyle/getComputedStyle获取真实尺寸。
摘要由CSDN通过智能技术生成

问题

先举个栗子:

<style>
    div {
      width: 100px;
      height: 100px;
      background: #dda1f8;
    }
  </style>

  <script>
    window.onload = function () {
      var oDiv = document.getElementById('div');

      setInterval(function () {
        oDiv.style.height = oDiv.offsetHeight - 1 + 'px';
      }, 30)
    };
  </script>

运行结果为 物体的高在减小

再给div的样式表添加 border: 1px solid;

再运行发现物体的高在增加

原因是因为offsetHeight得到的不仅仅是width的值, 而是 width + border + padding 的值
所以这里的offsetHeight = width + border*2(左右边框) - 1,那么定时器每执行一次,offsetHeight的值+1, 所以物体的高会增加

解决

1、不用offsetHeight,而在div设置行间样式

2、currentStyle、 getComputedStyle() 获取非行间样式

<script>
    window.onload = function () {
      var oDiv = document.getElementById('div');

      function getStyle(obj, name) {
        if (oDiv.currentStyle) {
          return oDiv.currentStyle[name];
        }
        else {
          return getComputedStyle(obj, false)[name];
        }
      }

      setInterval(function () {

        oDiv.style.height = parseInt(getStyle(oDiv, 'height')) - 1 + 'px';
      }, 30);
    };
  </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁什么鸭,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值