我发现网上一些教程可能都是10几年前的老古董了,经过不知道多少号复制翻新,导致有时候你很难去发现问题,甚至是大部分的教程都是这么写的,害人不浅。

问题的经过是这样的,我需要获取页面的可视高度。网上搜一搜,全部都说使用body.clientHeight来获取,结果嘛获取的是body的总高度

经过我一番查找,发现问题所在。body.clientHeight只有在quirks mode(怪异模式)下才能返回可视高度,在strict mode(标准模式)要使用的是根节点的clientHeight,也就是 document.documentElement.clientHeight

所谓标准模式的判定是你在HTML文件上方声明了<!DOCTYPE html>.

以下是 w3c Extensions to the Element Interface的原文:

The clientHeight attribute must run these steps:

  1. If the element has no associated CSS layout box or if the CSS layout box is inline, return zero.
  2. If the element is the root element and the element’s node document is not in quirks mode, or if the element is the HTML body element and
    the element’s node document is in quirks mode, return the viewport
    height excluding the size of a rendered scroll bar (if any).
  3. Return the height of the padding edge excluding the height of any rendered scrollbar between the padding edge and the border edge,
    ignoring any transforms that apply to the element and its ancestors.

中文翻译如下:

clientHeight属性必须运行以下步骤:

  1. 如果元素没有关联的CSS 布局框或者CSS 布局框是内联的,则返回零。
  2. 如果元素是根元素并且元素的节点文档不是quirks 模式,或者如果元素是HTMLbody元素并且元素的节点文档 是quirks 模式,则返回不包括渲染滚动条大小的视口高度(如果有)。
  3. 返回填充边缘的高度,不包括填充边缘和边框边缘之间的任何渲染滚动条的高度,忽略应用于元素及其祖先的任何变换。

第2条就明确提到元素是根元素并且不是quirks mode,或者元素是body并且是quirks mode。使用clientHeight才能正确获取可视窗口的高度

参考链接
Java Script 标准参考教程 Element.clientHeight,Element.clientWidth

mdn web docs Element.clientHeight

关于body.clientHeight,body.clientWidht获取的不是可视高度的问题相关推荐

  1. html如何制作查看更多横条,页面浏览量顶部横条显示代码-附“Js/Jquery获取网页屏幕可见区域高度”...

    偶然看到这个页面浏览量显示的东东,很有意思,自己做了一个. 代码如下:html> 页面浏览量顶部横条显示 $(function(){ $(window).scroll(function() { ...

  2. js 和 query 获取页面和滚动条的高度

    //页面位置及窗口大小 function GetPageSize() { var scrW, scrH; if(window.innerHeight && window.scrollM ...

  3. JS获取元素的大小(高度和宽度)

    JS获取元素的大小(高度和宽度) 在 JavaScript中,使用下面 3 组属性可以获取元素的高度和宽度.如表所示. 元素尺寸属性 说明 clientWidth 获取元素可视部分的宽度,即 CSS ...

  4. 原生js获取html元素高度,js获取页面及个元素高度、宽度的代码

    网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...

  5. vue获取屏幕的实时 宽度 / 高度

    mounted () {const that = this;window.onresize = () => {return (() => {window.screenWidth = doc ...

  6. table列最小宽度 vue_vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)...

    mounted() { // 在mounted中监听表格scroll事件 this.$refs.scrolltable.addeventlistener( 'scroll',(event) => ...

  7. Android 开发 Activity里获取View的宽度和高度 转载

    Android 开发 Activity里获取View的宽度和高度 转载 原文地址:https://blog.csdn.net/chenbaige/article/details/77991594 前言 ...

  8. 获取滚动条距离底部的高度

    今天写移动端遇到了需求要获取滚动条距离底部的高度 var wHeight = $(document).height();var scrollHeight = wHeight - $(document) ...

  9. [js] 获取浏览器当前页面的滚动条高度的兼容写法

    [js] 获取浏览器当前页面的滚动条高度的兼容写法 document.documentElement.scrollTop || document.body.scrollTop; 个人简介 我是歌谣,欢 ...

  10. 微信小程序获取windowHeight出现不同页面高度不一致问题及解决方案

    微信小程序获取windowHeight出现不同页面高度不一致问题及解决方案 参考文章: (1)微信小程序获取windowHeight出现不同页面高度不一致问题及解决方案 (2)https://www. ...

最新文章

  1. 利用HoloLens进行无人船舶驾驶!微软日本概念视频
  2. 排序算法--冒泡排序的首尾改进
  3. Array的sort() 方法
  4. php object添加到数组,PHP Object转换为数组array
  5. 【theano-windows】学习笔记十八——混合蒙特卡洛采样
  6. bootstrap源码之滚动监听组件scrollspy.js详解
  7. 高新园区到大连计算机学校,大连高新区中心小学
  8. 非常好的Java反射例子
  9. Java使用iText生成word文件的解决方案
  10. 酒局中同事说“不把这杯酒喝了就是不给我面子”,我该怎么办?
  11. linux 忘记原来的myql的root的密码
  12. 转载-史密斯(smith)圆图讲解-基础内容
  13. 阿里巴巴java开发手册 《Java开发手册》v1.5.0 华山版.pdf
  14. java 十进制十六进制转换_Java进制转换之十六进制转十进制
  15. 数位板电脑绘画网课盘点(手绘动漫课程排名)
  16. EV录屏怎么把自己的摄像头放进去,摄像头好的,但是人像很花,看不清人脸
  17. Apache Kafka 3.0.0 稳定版发布,有哪些值得关心的变化?
  18. docker启动es报错:failed to obtain node locks...
  19. Bing地图瓦片体系
  20. NPE和CPE的区别

热门文章

  1. cad2010多个文件并排显示_CAD软件同时显示两张或多张图纸的方法
  2. 使用DOM4J解析大容量XML文件
  3. 你不知道的华为交换机22个实用技巧
  4. dbf格式转Excel(xls)格式教程
  5. 基于SpringBoot的简单记账系统
  6. 功能强大且易用的云打印解决方案
  7. 整人电脑BAT小程序源码大全
  8. layui离线文档2.2.5
  9. 注册测绘师 案例分析
  10. proteus中的米字(14段)数码管用法