• innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法


     

    要理解这几个属性,首先要搞明白body,documentElement的区别

    1、body是DOM对象里的body子节点,即<body>标签
    2、documentElement是整个节点树的跟节点,即<html>标签

    ========================body,html的区别==================================

    很多人都认为body和html是一样的,判断依据就是给body加背景颜色后,整个网页文档都会跟着变色。其实这种现象并不能说明body和html节点就是同一个东西,之所以会这样是由继承导致的。

    我们都知道继承是指子元素继承父元素的某些特性,body作为html的子节点,理论上是不存在html继承body属性的,但就偏偏存在这样一个例外,html继承了body的background属性,这就导致了给body添加背景颜色整个html跟着变色。(各位同学可以试试给body加个高度,设置背景颜色,然后给html设置另外一个背景颜色,看看效果)

    因此新建的网页在没内容的情况下,body的高度等于0,随着内容的增加,body的高度随之增加

    ========================结束=======================================

    理解了body和html的区别就好理解innerHeight,clientHeight,offsetHeight,各浏览器之所以返回的值不同,根本原因就在于计算的基准不同

    1、document.body以body元素为计算基准

    2、document.documentElement以html为基准

    ======================================================

    以上都是在标准模式下,在怪异模式下情况又有点不同了:

    IE在怪异模型(quick mode)下document.documentElement无法正确取到clietHeight,scrollHeight等值,比如clietHeight=0。可见IE的怪异模型并没有把html作为盒子模型的一部分,好在现在很少使用怪异模型。(注:如果页面没写DTD或写的不对,IE6默认使用怪异模型解析页面)

    document.body.scrollHeight和document.documentElement.scrollHeight的区别:
    document.body.scrollHeight是body元素的滚动高度,document.documentElement.scrollHeight为页面的滚动高度(正常情况下应该使用这个),且 document.documentElement.scrollHeight在IE和Firefox下还有点小差异。
    IE : document.documentElement.scrollHeight = document.body.scrollHeight + marginTop bottom高度 + 上下border宽度
    firefox : document.documentElement.scrollHeight = document.body.scrollHeight + marginTop bottom高度

    IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
    chrome、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。
    IE知道11版本才修改成和chorme,ff一致

    alert(document.compatMode+"
    window.innerHeight:"+window.innerHeight+"
    "+"document.documentElement.clientHeight:"+document.documentElement.clientHeight+"
    "+"document.documentElement.offsetHeight:"+document.documentElement.offsetHeight+"
    document.body.offsetHeight:"+document.body.offsetHeight+"
    document.body.clientHeight:"+document.body.clientHeight);
    

      

  • 相关阅读:
    Elasticsearch的介绍与安装配置启动问题
    代码发布项目
    gitpython模块
    Paramiko模块
    gojs插件的介绍与使用
    django中如何实现websocket,真正通过websocket实现群聊功能
    如何实现服务端主动给客户端推送消息,websocket详解,以及django如何使用websocket问题
    简单爬取汽车之家新闻(requests模块+bs4)
    http协议版本,响应状态码,正反向代理的区别,与伪静态
    web开发经验——富头像上传编辑器的使用
  • 原文地址:https://www.cnblogs.com/diantao/p/5267898.html
Copyright © 2020-2023  润新知