height、clientHeight、scrollHeight、offsetHeight区别

简介: height、clientHeight、scrollHeight、offsetHeight区别

我们来实现test中的onclick事件

function justAtest(){
  var test= document.getElementById("test");
  var test2=document.getElementById("test2");
  var test3=document.getElementById("test3");
  var test4=document.getElementById("test4");
  alert(test4.style.height);
  alert(test3.style.height);
  alert(test2.style.height);
  alert(test.style.height);
  alert(document.body.style.height);
}

height:其实Height高度跟其他的高度有点不一样,在javascript中它是属于对象的style对象属性中的一个成员,它的值是一个字符类型的,而另外三个高度的值是int类型的,它们是对象的属性.因此这样document.body.height就会提示undenifine,而必须写成document.body.style.height

上面的脚本将依次弹出700px,550px,600px,500px,1000px.height是最简单的了,不必去考虑是否有滚动条及边框等.因此也不做多解释了.

然后我们将脚本换下

function justAtest(){
  var test= document.getElementById("test");
  var test2=document.getElementById("test2");
  var test3=document.getElementById("test3");
  var test4=document.getElementById("test4");
  alert(test4.clientHeight);
  alert(test3.clientHeight);
  alert(test2.clientHeight);
  alert(test.clientHeight);
  alert(document.body.clientHeight);
}

运行后火狐的结果为:700,550,583,483,1000

IE的结果为:700 ,550,583,483,1000

IE与火狐下的运行结果是一致的.下面来看下clientHeight的定义.

clientHeight:可见区域的宽度,不包括boder的宽度,如果区域内带有滚动条,还应该减去横向滚动条不可用的高度,正常的是17px,其实就是滚动条的可滚动的部分了,其实clientHeight与height的高度差不多,如果不带滚动条的话他们的值都是一样的,如果带有滚动条的话就会比height值少17px;火狐与IE下均为一致.

接着我们来看scrollHeight

function justAtest(){
  var test= document.getElementById("test");
  var test2=document.getElementById("test2");
  var test3=document.getElementById("test3");
  var test4=document.getElementById("test4");
  alert(test4.scrollHeight);
  alert(test3.scrollHeight);
  alert(test2.scrollHeight);
  alert(test.scrollHeight);
  alert(document.body.scrollHeight);
}

运行后火狐的结果为:700,552,700,602,1002

IE的结果为: 15, 15 , 700,602, 552

scrollHeight:这个属性就比较麻烦了,因为它们在火狐跟IE下简直差太多了..

在火狐下还很好理解,它其实就是滚动条可滚动的部分还要加上boder的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.

在IE中 scrollHeight确是指这个对象它所包含的对象的高度加上boder的高度和marging,如果它里面没有包含对象或者这个对象的高度值未设置,那么它的值将为15

最后我们来看offsetHeight

function justAtest(){
  var test= document.getElementById("test");
  var test2=document.getElementById("test2")
  var test3=document.getElementById("test3")
  var test4=document.getElementById("test4");
  alert(test4.offsetHeight);
  alert(test3.offsetHeight);
  alert(test2.offsetHeight)
  alert(test.offsetHeight);
  alert(document.body.offsetHeight)
}

offsetHeight:

FF:700,552,602,502,1002

IE:700,552,602,502,1002

这个属性好办,因为在测试中IE跟火狐的结果是一样的,均表示是自身的高度,如果有设置boder的话还应该加上boder的值,因为除了test4这个div外,其他的div均有设置border=1px,所以552=550+2,其他的均一样.

综上所述,clientHeight与height的区别是如果有滚动条时应减去滚动条的17px不可用部分,offsetHeight与Height的区别是增加了boder的高度,ScrollHeihgt与Height的区别是火狐下与offsetHeight一致,IE下如上所述.

相信你了解了这个,对width,clientWidth,scrollWidth,offsetWidth已经不陌生了吧,只不过一个是长一个是宽的问题了.


相关文章
echarts修改tooltip默认样式(使用formatter函数拼接加工)
echarts修改tooltip默认样式(使用formatter函数拼接加工)
1500 0
|
7月前
|
弹性计算 搜索推荐 API
2026年阿里云三种方案快速部署 OpenClaw(Clawdbot)详细教程
OpenClaw(前身为Clawdbot、Moltbot)作为一款功能强大的开源AI代理与自动化平台,凭借自然语言理解、任务自动化执行以及多工具集成的核心能力,能够实现读写文件、运行脚本、搭建个性化工作流等一系列实用操作,广泛适配个人办公自动化、开发辅助以及轻量团队协作等多种场景。2026年阿里云针对不同用户的使用需求,推出了轻量云服务器、无影云电脑、ECS云服务器三种针对性部署方案,均通过预置专属镜像简化配置流程,无需复杂命令行操作,零基础用户也可顺利完成部署。本文将详细拆解这三种方案的完整部署流程,同时梳理操作中的关键要点与常见问题,助力不同场景用户快速搭建专属OpenClaw服务。
1915 3
|
JavaScript
【vue】 vue-seamless-scroll 无缝滚动依赖
【vue】 vue-seamless-scroll 无缝滚动依赖
2443 1
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
2953 0
|
11月前
|
JavaScript 前端开发
uni-app中如何使用scss定义变量
使用SCSS在uni-app项目中定义和使用变量,不仅提高了样式代码的可维护性,还使得样式的修改和主题定制变得更加方便。只需更改变量值,就可以轻松改变整个应用的外观和风格。通过合理地组织和管理SCSS代码,可以大大提高开发效率和项目的可维护性。
856 9
|
前端开发 JavaScript 数据格式
通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
array.reduce()可以用来数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据、性能优化等,使用难度相对高一些,但是能大大减少代码量。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时
|
安全 开发工具 git
git合并错了,我想回退到之前的版本
git合并错了,我想回退到之前的版本
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7689 1
qiankun框架中基于actions机制实现主应用与子应用间的双向通信
qiankun框架中基于actions机制实现主应用与子应用间的双向通信
1669 0

热门文章

最新文章