JS中clientHeight、scrollHeight和offsetHeight的大坑,滚动条抖动问题解决
1.什么是clientHeight、scrollHeight和offsetHeight
学习原生js的人一定会接触到client家族、scroll家族和offset家族。其中clienHeight、scrollHeight和offsetHeight一般用来求网页内容的高度,而对应的clientWidth、scrollWidth和offsetWidth则用来求网页内容的宽度,由于width和Height属性是类似的,所以这里我只挑这三个height来讲一下。
1.1 clientHeight是什么
clientHeight很多文章把它翻译成网页的可见高度,实际上是不太准确的,首先,从单词本身来说,client并没有可见的意思,(client 顾客,客户,委托人)。其次,clientHeight获取到的高度其实和内容可不可见没有一点关系。下面给出我的结论:
clientHeight = (content height) + (padding top+padding bottom);
翻译成中文就是 clientHeight = 内容实际高度 + 上下内边距。
而内容实际高度可以用window.getComputeStyle(obj).height或者$(obj).css(“height”)获取。
简单的来说:在网页的盒子模型中,一个元素由内到外分别由 height + padding + border + margin组成,而clientHeight只取前面的height和padding。不管内容可不可见,即使你用定位把元素移出屏幕外,clientHeight获