js和jquery中宽和高

一、JS中宽和高

一、Window和Document的区别

  1.Window对象

    Window 对象表示浏览器中打开的窗口

    Window对象可以省略

    如:alert()==window.alert()

  2.Document对象

    Document对象是Window对象的一部分

    document.body==window.document.body

    浏览器的HTML文档称为Document对象

二、window.location和document.location

  1.window.location

    window对象的location属性引用的是Location对象,表示该窗口中当前显示文档的URL。

  2.document.location

    document对象的location属性也是引用了Location对象

    window.location === document.location //true

     location.herf === window.location.href === document.location.href ===window.document.location.href

三、与window相关的宽和高

  1.浏览器窗口可视区域大小

    获得浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)的方法

    1.1、对于IE9+、Chrome、Firefox、Opera以及Safari:

      window.innerHeight:浏览器窗口的内部高度

      window.innerWidth:浏览器窗口的内部宽度

    1.2、对于IE8、7、6、5的兼容

      document.documentElement.clientHeight:表示HTML文档所在窗口的当前高度

      document.documentElement.clientWidth:表示HTML文档所在窗口的当前宽度

      或者

      Document对象的body属性对应HTML文档的<body>标签

      document.body.clientHeight

      document.body.clientWidth

      在不同浏览器都实用的JavaScript方案,兼容性写法:

      var w = document.documentElement.clientWidth || document.body.clientWidth;

      var h = document.documentElement.clientHeight || document.body.clientHeight;

  2.window.screen

    注:screen要小写

    window.screen对象包含有关用户屏幕的信息。

    window.screen.height:整个屏幕的高度

    window.screen.width:整个屏幕的宽度

    window.screen.availHeight:可利用的高度

    window.screen.availWidth:可利用的宽度

    window.screenTop:浏览器距屏幕顶部的距离

    window.screenLeft:浏览器距屏幕最左侧的宽度

三、与document相关的宽高介绍

  1.与client相关的宽高

    document.body.clientWidth,document.body.clientHeight,document.body.clientLeft,document.body.clientTop:

    clientWidth和clientHeight:

    元素可视部分宽度和高度,即padding+content;如果没有滚动条,即元素设定的高度和宽度;如果出现滚动条,滚动条会遮盖元素的宽高,那么该属性就是其本来的宽高减去滚动条的宽高。

    总结:

    1.1无padding无滚动轴

     clientWidth = style.width

    1.2有padding无滚动轴

     clientWidth = style.width + style.padding*2

    1.3有padding有滚动轴,且滚动轴是显示的

     clientWidth = style.width + style.padding*2 - 滚动轴宽度

    clientLeft和clientTop:

    返回的是元素周围边框的厚度,如果不指定一个边框或者不定位该元素,它的值就是0

    总结:

    这一对属性是用来读取元素的border的宽度和高度的

    clientTop = border-top的border-width

    clientLeft = border-left的border-width

  2.与offset相关的宽高

    document.body.offsetWidth,document.body.offsetHeight,document.body.offsetLeft,document.body.offsetTop

    offsetWidth和offsetHeight:

    这一对属性指的是元素的border+padding+content的宽度和高度,该属性和其内部的内容是否超出元素的大小无关,只和本来设定的border以及width和height有关

    总结:

    2.1假如无padding无滚动无border

      offsetWidth = clientWidth = style.width

    2.2假如有padding无滚动有border

      offsetWidth = style.width + style.padding*2 + (border-width)*2;

      offsetWidth = clientWidth + border宽度*2

    2.3假如有padding有滚动条,且滚动条是显示的,有border

      offsetWidth = style.width + style.padding*2 + (border-width)*2

      offsetWidth = clientWidth + 滚动条宽度 + border宽度*2

    offsetLeft和offsetTop:

      offsetParent

      1.如果当前的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body

      2.如果当前的父级元素有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素

      兼容性问题:

      在IE6/7中:

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

      在IE8/9/10及Chrome中

      offsetLeft = (offsetParent的margin-left) + (offsetParent的border宽度)+(offsetParent的padding-left)+(当前元素的margin-left)

      在FireFox中

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

  3.与scroll相关的宽高

     document.body.scrollWidth,document.body.scrollHeight,document.body.scrollLeft,document.body.scrollTop

    scrollWidth和scrollHeight

     document.body的scrollWidth和scrollHeight与div的scrollWidth和scrollHeight是有区别的。 

     在document.body的scrollWidth和scrollHeight

     3.1 给定的宽高小于浏览器窗口

      scrollWidth通常是浏览器窗口的宽度

      scrollHeight通常是浏览器窗口的高度

     3.2 给定宽高大于浏览器窗口,且内容小于给定宽高

      scrollWidth = 给定的宽度 + 其所有padding,margin和border

      scrollHeight = 给定的高度 + 其所有的padding,margin和border

     3.3 给定宽高大于浏览器窗口,且内容大于给定宽高

      scrollWidth = 内容宽度 + 其所有的padding,margin和border

      scrollHeight = 内容高度 + 其所有的padding,margin和border

      在div中scrollWidth和scrollHeight

       无滚动轴时:

       scrollWidth == clientWidth =style.width + style.padding*2

       有滚动轴时:

       scrollWidth == 实际内容的宽度+padding*2

       scrollHeight == 实际内容的高度+padding*2

    scrollLeft和scrollTop

     这对属性是可读写的,指的是当元素其中的内容超出其宽高的时候,元素被卷起的高度和宽度。

  4.obj.style.width和obj.style.height

    对于一个dom元素,它的style属性返回的是一个对象,这个对象中的任意一个属性是可读写的,style.width等于css属性中的宽度,style.height等于css属性中的高度

四、documentElement和body

  documentElement包含body,可以通过documentElement.childnodes取到body

五、document相关宽高兼容性问题

  client相关宽高,各个浏览器解析都一样,当我们要获取可视区域的宽高时:

  document.documentElement.clientWidth || document.body.clientWidth

  offsetTop和offsetLeft兼容问题见上总结

  offsetWidth和offsetHeight各个浏览器解析基本一致

六、event对象中的五种坐标

  1.clientX和clientY

   相对于浏览器可视区域左上角(0,0)的坐标

  2.screenX和screenY

   相对于设备屏幕左上角(0,0)的坐标

  3.offsetX和offsetY

   相对于事件源左上角(0,0)的坐标

  4.pageX和pageY

   相对于整个网页左上角(0,0)的坐标

  5.X和Y

   本来是IE属性,相对于CSS动态定位的最内层包容元素

七、各种宽高应用

  1.获取可视区域高度的兼容性写法

   var clients = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

  2.获取元素顶部距浏览器顶部的距离

   var Top = el.getBoundingClientRect().top; //可以取到负值,getBoundingClientRect()可以取到top,bottom,left,right四个值

  3.获取页面卷去的高度

   var scrollTop = document.body.scrollTop;

  4.获取整个页面的高度

   var wholeHeight = document.body.scrollHeight;

  5.判断页面滚动到了底部

   页面可视区域高度+页面卷去的高度>=整个页面的高度

  6.判断页面滚动到了顶部

   页面卷去的高度==0

  7.判断div内部的内容区域滚动到了底部

   var el = document.getElementById('box');

   var divWholeHeight = el.scrollHeight; //div的内容的整个高度

   var scrollTop = el.scrollTop; //div内容区卷去的高度

   var divHeight = el.clientHeight; //div的可视区高度

   scrollTop + divHeight >= divWholeHeight //滚动到了底部

   scrollTop == 0 //滚动到了顶部

  8.计算滚动轴的宽度

   第一种方法

   function getScrollBar(){

     var el = document.createElement('p'),

     styles = {

      "100px",

      height:"100px",

      overflowY:"scroll"

     },i,scrollBarWidth;

     for(i in styles){

      el.style[i]=styles[i];

     }

     document.body.appendChild(el);

     var scrollBarWidth = el.offsetWidth - el.clientWidth;

     el.remove();

     return scrollBarWidth;

   }

   

   第二种方法

   function getScrollBar(){

     var el = document.createElement('p'),

     styles = {

      "100px",

      height:"100px"

     },i,clientWidth1,clientWidth2,scrollBarWidth;

     for(i in styles){

      el.style[i]=styles[i];

     }

     document.body.appendChild(el);

     clientWidth1 = el.clientWidth;

     el.style.overflowY = "scroll";

     clientWidth2 = el.clientWidth;

     var scrollBarWidth = clientWidth1 - clientWidth2;

     el.remove();

     return scrollBarWidth;

   }

二、jquery中宽和高

  1、.width()和.height()

    1.1 content的宽和高

    1.2 可读写,但window和document传值无效

        对于普通元素:width(value)/width(function(){})

    1.3 .width()与.css("width")区别

      width()返回结果无单位,css("width")的结果有单位

  2、.innerWidth()和.innerHeight()

    2.1 content的宽和高+padding

    2.2 window和document传值无效,不推荐使用

       普通元素:innerWidth(value)/innerWidth(function(){})

  3、.outerWidth()和.outerHeight()

    3.1 .outerWidth(true):content+padding+border+margin

        .outerWidth():不传参数或者参数为false,content + padding+border ,不包括margin

  4、.scrollLeft()和.scrollTop()

    4.1 .scrollLeft():相对于水平滚动条左边的距离

      如果元素没有被滚动,那么这个值为0。

    4.2 .scrollTop():相对于纵向滚动条上边的距离

      如果元素不能被滚动,那么这个值为0。

  5、.offset()和.position()

    5.1 .offset():相对于document的当前坐标值(相对于body左上角的left,top的值)

    5.2 .position():相对于offset parent的当前坐标值(相对于offset parent元素左上角的left,top的值)。

  6、jquery中宽高的应用

   6.1 可视区域加载

    $(window).scroll(function(){

     var ks_area = $(window).height(); //可视区域的高度

     var scrollheight = $(window).scrollTop; //卷去的头部

     var divtop = $("#box").offset().top; //元素距顶部的距离

     if(ks_area + scrollheight >= divtop){

      $("#box").addClass("animate");

     }

    })

   6.2 判断滚动到头部和滚动到底部

    $(window).scroll(function(){

     var ks_area = $(window).height(); //可视区域的高度

     var wholeHeight = $(document).height(); //整个文档的高度

     var scrolltop = $(window).scrollTop(); //卷去的高度

     if(ks_area + scrolltop >= wholeHeight){

      alert("滚动到底部了");

     }

     if(scrolltop == 0){

      alert("滚动到顶部了")

     }

    })

原文地址:https://www.cnblogs.com/ytwanzi/p/7479248.html