scrollHeight, clientHeight, offsetHeight的区别

 

 

 

浏览器窗口和网页文档

先明确浏览器窗口和网页文档的区别,拿下面这张图来说

clipboard.png

右边那张图中,大红色方框框起来的是浏览器窗口,而网页文档就是左边这张图。先不用去管scrollHeight这些东西,后面再解释。
先明确浏览器窗口网页文档是不同的!!不用去纠结它们什么时候高度相等,明白这两个代表的含义才是最重要的。

浏览器窗口

宽:window.innerWidth
高:window.innerHeight

一些注意点:

  1. 无论是否出现滚动条,这两个值都是不变的。
  2. 当调整浏览器大小时,这两个值会变。

简而言之:就是你可以看到的浏览器视窗的大小(不包括顶部的菜单栏)

有小伙伴会问了,那window.outerWidth是和outerHeight是什么呢,这两个就是包含菜单栏的,比如你可以在chrome里按下F12打开调试窗口,放在右侧,就可以发现innerWidth和outerWidth是不同的。

网页文档

宽:document.body.scrollWidth
高:document.body.scrollHeight

好了既然这里讲到scrollHeight了,那刚好把clientHeight和offsetHeight讲了。
要比较这三个属性的不同,有个前提条件,就是元素要出现滚动条。举个栗子就是:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .container {
            width: 600px;
            height: 600px;
            padding: 10px;
            border: 10px solid lightgray;
            overflow: auto; // 注意这个属性
        }
        .large_block {
            width: 1000px;
            height: 2000px;
            background-color: lightblue;
            padding: 20px;
            margin: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="large_block"></div>
    </div>
</body>
</html>

如图所示,大家也可以拷贝代码自己看效果.

clipboard.png

对于以上代码,分别获取:

clipboard.png

对于这三个属性,还是拿这张图来说:

clipboard.png

scrollHeight: 就是container内部的总高度
这里内部元素就是large_block,large_block所撑开的高度(2000 + 40(上下padding) + 40(上下margin)) = 2080px,然后加上自身container上下各10px的padding,因此一共是2100px

clientHeight: 就是container内部可见高度 + 自身padding。
内部可见高度为600 - 17(滚动条高度)
padding为上下各10,因此一共是600 - 17 + 20 = 603

offsetHeight: 也是container自己本身的可见高度 + 自身padding + 自身border + 滚动条
与clientHeight不同的就是要加上自身border以及滚动条的高度,因此是603 + 20 + 17 = 640

关于documet.documentElement

document.documentElement.clientHeight//无论内容多少,恒等一个屏幕高度

document.documentElement.offsetHeight//大于等于dom元素高度,上不封顶

document.documentElement.scrollHeight//至少大于等于屏幕高度,上不封顶

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值