首先,先吓唬一下我们的小白们!在js中的描述宽高的可以细分有22种。

  1. window.innerWidth //除去菜单栏的窗口宽度
  2. window.innerHeight//除去菜单栏的窗口高度
  3. window.outerWidth//包括菜单栏的窗口宽度
  4. window.outerHeight//包括菜单栏的窗口宽度
  5. window.screen.height//电脑屏幕的高度
  6. window.screen.width//电脑屏幕的宽度
  7. window.screen.availHeight//电脑屏幕的可利用高度
  8. window.screen.availWidth//电脑屏幕的可利用宽度
  9. window.screenTop//浏览器距离屏幕的高度
  10. window.screenLeft//浏览器距离屏幕的宽度
  11. document.body.clientWidth//指元素的自身宽度(包括padding)
  12. document.body.clientHeight//指元素的自身的高度(包括padding)
  13. document.body.clientLeft//子级div内容位置到父级内容区域的宽度距离(即border值)
  14. document.body.clientTop//子级div内容位置到父级内容区域的高度距离(即border值)
  15. document.body.offsetWidth//指定元素的宽度(包括padding,border和内容)
  16. document.body.offsetHeight//指定元素的高度(包括padding,border和内容)
  17. document.body.offsetTop//距离父级元素的高度
  18. document.body.offsetLeft//距离父级元素的宽度
  19. document.body.scrollWidth//获取的是文档的宽度(当指定的宽度小于浏览器窗口的时候,为浏览器的宽度)
  20. document.body.scrollHeight//获取的是文档的高度(当指定的高度小于浏览器窗口的时候,为浏览器的高度)
  21. document.body.scrollTop//文档被滚动上去的时候(即滚动条往上滚动的距离)
  22. document.body.scrollLeft//文档被滚动右去的时候(即滚动条往右滚动的距离)

看起来有点怕怕,但我们细分可以很清晰的分清楚他们

  • width和height的都是值元素或窗口等的宽高,top和left表示的是到相对元素的距离
  • client,offset,scrollh和screen都分别有width,height,top和left
  • 最后就是区别窗口和屏幕的宽高和元素的宽高

我们先从上往下去分析每一个的作用

innerHeight/Width

outerHeight/Width

Screen屏幕宽高

首先我们先分清楚widnow和document的区别
window 整个窗口
document 除了顶头的菜单栏
document对象是window对象的一部分
话不多说,直接上图

offset

document.body.offsetWidth
document.body.offsetHeight
指定元素的border+padding+内容的宽度和高度

如果没有padding和border
offsetWidth = clientWidth

兼容性问题
IE6/7中(微软已经不提供支持)
offsetLeft = (offsetParent的padding-left)+(当前元素的margin-left)

IE8以上
offsetLeft = (offsetParent的margin-left)+(当前元素的margin-left)

火狐中
offsetLeft = (offsetParent的margin-left)+(当前元素的margin-left)+(offsetParent的padding-left)

client

指定元素的宽度和高度 即内容+padding

如果没有滚动条,即元素本身设定的宽度
如果出现滚动条,滚动条会遮盖元素宽高,那么,该属性就是其本来宽高减去滚动条的宽度
console.log( document.body.clientHeight);
console.log(document.body.clientWidth);

读取元素border的宽度和高度(子级内容区域到父级内容区域的距离)
document.body.clientLeft
document.body.clientTop

scroll

谷歌浏览器下

  • 当指定的宽高小于浏览器窗口的时候

    • scrollWidth为浏览器的宽度
    • scrollHeight为浏览器的高度
  • 当给的宽高大于浏览器窗口,且内容小于给定的宽高时
    • scrollWidth给定的宽度+padding、margin和border
    • scrollHeight给定的宽度+padding、margin和border
  • 当给定的宽高大于浏览器窗口,且内容大于给定的宽高
    • scrollWidth内容宽度+所有的padding,margin和border
    • scrollHeight内容高度+所有的padding,margin和border

属性时可读写的

指当元素其中的内容超出其宽高的时候,元素被卷起的高度和宽度

懒加载思路

在还没有这个技术的出现时,页面的所有内容和图片,都会在访问时一次性的加载出来,对于浏览器和服务器都是一种负担,如果想百度图片这样的图库,用手机来看,多少流量都是浪费。这样的用户体验不仅差,还给服务器增加负担。所以懒加载技术才酝酿出来。

懒加载技术的要点是通过滚动事件触发判断

元素到顶部的距离小于       <=      可视区域 client(满足条件后触发加载后台内容)

底部加载技术
scrollTop+可视区域 == 网页高度 scrollHeight(满足条件后触发加载后台内容)

一天多写一点点,一天多积累一点点!

(完!)

Js获取宽高度的归纳总结的更多相关文章

  1. Js获取宽高度的归纳集锦总结

    首先,先吓唬一下我们的小白们!在js中的描述宽高的可以细分有22种.属性根据不同的兼容性也分为五种 window.innerWidth //除去菜单栏的窗口宽度,与浏览器相关 window.inner ...

  2. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。

    js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ...

  3. jquery、js获取页面高度宽度等

    jquery获取页面高度宽度 //获取浏览器显示区域(可视区域)的高度 : $(window).height(); //获取浏览器显示区域(可视区域)的宽度 : $(window).width(); ...

  4. 【转】js 获取浏览器高度和宽度值(多浏览器

    原文地址:http://www.jb51.net/article/19844.htm js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ...

  5. JS获取div高度的方法

    有时在写页面时,需要获取一个div的高度.怎么才能获取呢?哈哈,先上结论.有两种方法. offsetHeight .clientHeight getComputedStyle offsetHeight ...

  6. js获取浏览器高度

    常用: JS 获取浏览器窗口大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 获取窗口宽度 if (window.innerWidth) winWidth = ...

  7. JS获取浏览器高度 并赋值给类

    在给网站做轮播焦点图的时候,如果需要全屏的话,可以用下面的jQuery来获取浏览器高度,然后赋值给类. $(window).load(function () { var maxHeight = 0; ...

  8. 原生js获取宽高与jquery获取宽高的方法的关系

    说明:1.因为获取高度的情况跟获取宽度的情况一样,所以以下只说获取宽度的情况.  2.以下所说的所有方法与属性所返回的值都是不带单位的.  3.为了方便说明,以下情况采用缩写表示:  obj -> ...

  9. js 获取浏览器高度和宽度值(多浏览器)(转)

    IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...

随机推荐

  1. Python3+RobotFramework+pycharm环境搭建

    我的环境为 python3.6.5+pycharm 2019.1.3+robotframework3.1.2 1.安装python3.x 略 之后在cmd下执行:pip  install  robot ...

  2. linux系统状态网络、权限、用户大杂烩

    来来来,我们聊一下liunx系统相关的知识!! 首先从查询网络配置开始 ifconfig 查询.设置网卡和ip等参数 ifup,ifdown 脚本命令,更简单的方式启动关闭网络 ip命令是结合了ifc ...

  3. [洛谷P3613]睡觉困难综合症

    写码30min,调码3h的题.. 好在最后查出来了 , , n, x, y, z); 改成了 , , n, mark[x], y, z); 然后$40\rightarrow 100$ #include ...

  4. 深度讲解Linux内存管理和Linux进程调度-打通任督二脉

    我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体的工作机制,这使得他 ...

  5. Java 异常(一)

    目录 异常简介 异常架构图 常见异常 异常分类 一:异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加 ...

  6. Java日志Log4j或者Logback的NDC和MDC功能

    NDC和MDC的区别 Java中使用的日志的实现框架有很多种,常用的log4j和logback以及java.util.logging,而log4j是apache实现的一个开源日志组件(Wrapped ...

  7. Mybatis和Mysql的Datetime的一些问题

    Mysql的时间类型 时间类型有time, date, datetime, timestamp 如Mysql官方文档所述: time 没有date,date没有time,datetime是date和t ...

  8. Android应用程序权限说明

    1.声明运行该应用本身所需要的权限 <!-- 声明该应用本身需要打电话的权限 --> <users-permission androd:name="android:perm ...

  9. Android H5混合开发(2):自定义Cordova插件

    前言 Cordova虽然定义了很多基础的插件,供H5端使用原生设备的功能. 但是,如果业务相关的功能,需要提供给H5端使用,那么,就需要我们自定义插件了. 这个"自定义"不是指由A ...

  10. 第二十六章 system v消息队列(二)

    msgsnd int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 作用: 把一条消息添加到消息队列中 参数: msqi ...