(scrollHeight、offsetHeight、clientHeight 同样可按本文去理解。)

这是一个很复杂的问题,让我们想像一下:

  • document.documentElement.scrollWidth
  • document.documentElement.offsetWidth
  • document.documentElement.clientWidth
  • document.body.scrollWidth
  • document.body.offsetWidth
  • document.body.clientWidth

有 6 个属性要测,这 6 个属性要放在 4 种情况中:

  • 没有指定 DOCTYPE,网页内容没有超过窗口宽度;
  • 没有指定 DOCTYPE,网页内容超过窗口宽度;
  • 指定 DOCTYPE,网页内容没有超过窗口宽度;
  • 指定 DOCTYPE,网页内容超过窗口宽度;

然后这 4 种情况要放到几个主流浏览器中,假设只有 3 种浏览器:

  • IE
  • Firefox
  • Chrome

算一下,6 * 4 * 3,有 72 种情况要测试,天啊。并且不要指望 Firefox 和 Chrome 结果是一样的,不要指望 Firefox 不会出现让您费解的结果,所以这真是一件恼火的事。

从应用入手简化分析

72 种测试情况确实很恼火,但我们回过头来一想,我们到底想要什么?

我认为我们想要两个东西:

  • 一是 scrollWidth(scrollHeight),虽然它用处不大,但应该比 offsetWidth(offsetHeight)有用得多。它表示的是文档区的宽度(高度),比如一个网页,特别是门户网站,拖很长,就要把没有显示出来的内容都计算进去。
  • 二是视口 viewport,就是 clientWidth,就是窗口中可显示内容的那块区域,就是我们常常看到页面上飞行广告,飞来飞去,碰到边边要反弹的那一块。

测试结果

结果很复杂,就不说了,这里只说实际中怎么使用:

  • 要使用 scrollWidth,取 document.documentElement.scrollWidth 与 document.body.scrollWidth 的最大值;
  • 要使用 clientWidth,如果 document.documentElement.clientWidth > 0,则使用 document.documentElement.clientWidth,否则使用 document.body.clientWidth。

表达式为:

  • var scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
  • var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;

动手

scrollWidth、offsetWidth、clientWidth 兼容性测试文件

再谈 document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth相关推荐

  1. 转document.documentElement和document.body的区别

    网页中获取滚动条卷去部分的高度,可以通过 document.body.scrollTop 来获取,比如使div跟着滚动条滚动: 转至:http://www.cnblogs.com/ckmouse/ar ...

  2. js中document.documentElement 和document.body 以及其属性 clientWidth等

    在设计页面时可能经常会用到固定层的位置,这就需要获取一些html对象的坐标以更灵活的设置目标层的坐标,这里可能就会用到document .body.scrollTop等属性,但是此属性在xhtml标准 ...

  3. document.documentElement和document.body的区别

    网页中获取滚动条卷去部分的高度,可以通过 document.body.scrollTop 来获取,比如使div跟着滚动条滚动: <div id="div" style=&qu ...

  4. document.documentElement与document.body

    写前端时遇到这两种方法,转载待以后查看. 两种特殊的文档属性可用来访问根节点: document.documentElement document.body 第一个属性可返回存在于 XML 以及 HT ...

  5. 将h5用HBuilderX打包成安卓app后,document.documentElement.scrollTop的值始终为0或者document.body.scrollTop始终为0...

    1 let time = setInterval(() => { 2 let scroll = document.documentElement.scrollTop || document.bo ...

  6. document.body、document.documentElement和window获取视窗大小的区别

    来源:http://www.ido321.com/906.html 在w3school关于window对象的介绍中,介绍了获取浏览器窗口大小的三种方法(浏览器的视口,不包括工具栏和滚动条). 对于In ...

  7. document.body 与 document.documentElement区别介绍

    什么是document.body? 返回html dom中的body节点 即<body> 什么是 document.documentElement? 返回html dom中的root 节点 ...

  8. document.documentElement.clientHeight 与 document.body.clientHeight(杜绝千篇一律的抄袭!!)

    document.documentElement.clientHeight 与 document.body.clientHeight用来获取页面可视高度我觉得有点问题.这两个应该不是一个东西. 页面中 ...

  9. 【兼容性解决】页面滚动距离document.documentElement.scrollTop兼容性问题

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

最新文章

  1. PowerPoint动画制作时的需要注意的N个事项
  2. 创建字符设备的三种方法
  3. linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
  4. 服务器子系统是什么,服务器是什么样子的,服务器一般用什么系统!
  5. python-time.time()
  6. 《大数据》2015年第3期“网络大数据专题”——大数据时代的互联网分析引擎...
  7. 微信支付官方SDK V3 .NET版的坑
  8. App的selenium,Appium爬App!
  9. 当前页面跳转网页,新打开和在本页面打开
  10. asp.core api 通过socket和服务器通信发送udp_详解Linux的SOCKET编程
  11. extern 关键字详解
  12. 网页设计html5留言板代码,web网页设计期末大作业_留言板制作.doc
  13. 基于Java的TCP Socket通信详解
  14. MFC显示位图和显示透明位图
  15. IMDB 2003.07.12 最新排名
  16. java中的分号是什么作用,分号的作用是什么
  17. 计算机怎么取消用户密码,怎么取消电脑开机密码界面
  18. 自编译最新稳定版 128M NAND WNDR4300V1 Openwrt Lean固件
  19. gc buffer busy的优化
  20. Hive经典最全笔试题系列

热门文章

  1. [Ext JS 4] 实战之 带week(星期)的日期选择控件(二)
  2. scada系统集成_专家 | 浅析地铁综合监控系统集成门禁系统
  3. oracle date 截取年月,在Oracle中,可用于提取日期时间类型特定部分(如年、月、日、时、分、秒)的函数有那些...
  4. 用户姓名信息保护python,喜大普奔!Maya 2022来了?!
  5. UVALive - 6442
  6. linux常用内核端口,基于Linux下的/O端口和I/O内存详解
  7. android编程设备信息,Android获取当前手机设备信息工具类详解
  8. python字符串函数的使用方法_python字符串的操作函数
  9. rcnn代码实现_轻松学Pytorch实现自定义对象检测器
  10. mysql.cnf配置