• 各种高度的区别及height、clientHeight、scrollHeight、offsetHeight的区分


    1.height、clientHeight、scrollHeight、offsetHeight

    我们来实现test中的onclick事件

       function justAtest()
        {
            var test= document.getElementById("test");
            var test2=document.getElementById("test2")
            var test3=document.getElementById("test3")
            var test4=document.getElementById("test4");     
            alert(test4.style.height); 
            alert(test3.style.height);    
            alert(test2.style.height)
            alert(test.style.height);      
            alert(document.body.style.height) 
         }


    height :其实Height高度跟其他的高度有点不一样,在javascript中它是属于对象的style对象属性中的一个成员,它的值是一个字符类型的,而另外三个高度的值是int类型的,它们是对象的属性.因此这样document.body.height就会提示undenifine,而必须写成document.body.style.height
    上面的脚本将依次弹出700px,550px,600px,500px,1000px.height是最简单的了,不必去考虑是否有滚动条及边框等.因此也不做多解释了.
    然后我们将脚本换下

         function justAtest()
        {
            var test= document.getElementById("test");
            var test2=document.getElementById("test2")
            var test3=document.getElementById("test3")
            var test4=document.getElementById("test4");     
            alert(test4.clientHeight); 
            alert(test3.clientHeight);    
            alert(test2.clientHeight)
            alert(test.clientHeight);      
            alert(document.body.clientHeight) 
         }

    运行后火狐的结果为:700,550,583,483,1000
               IE的结果为:700 ,550,583,483,1000
    IE与火狐下的运行结果是一致的.下面来看下clientHeight的定义.
    clientHeight:可见区域的宽度,不包括boder的宽度,如果区域内带有滚动条,还应该减去横向滚动条不可用的高度,正常的是17px,其实就是滚动条的可滚动的部分了,其实clientHeight与height的高度差不多,如果不带滚动条的话他们的值都是一样的,如果带有滚动条的话就会比height值少17px;火狐与IE下均为一致.
    接着我们来看scrollHeight

     function justAtest()
        {
            var test= document.getElementById("test");
            var test2=document.getElementById("test2")
            var test3=document.getElementById("test3")
            var test4=document.getElementById("test4");     
            alert(test4.scrollHeight); 
            alert(test3.scrollHeight);    
            alert(test2.scrollHeight)
            alert(test.scrollHeight);      
            alert(document.body.scrollHeight) 
         }

    运行后火狐的结果为:700,552,700,602,1002
               IE的结果为: 15, 15 , 700,602, 552
    scrollHeight:这个属性就比较麻烦了,因为它们在火狐跟IE下简直差太多了..
    在火狐下还很好理解,它其实就是滚动条可滚动的部分还要加上boder的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.

    在IE中 scrollHeight确是指这个对象它所包含的对象的高度加上boder的高度和marging,如果它里面没有包含对象或者这个对象的高度值未设置,那么它的值将为15
    最后我们来看offsetHeight

         function justAtest()
        {
            var test= document.getElementById("test");
            var test2=document.getElementById("test2")
            var test3=document.getElementById("test3")
            var test4=document.getElementById("test4");     
            alert(test4.offsetHeight); 
            alert(test3.offsetHeight);    
            alert(test2.offsetHeight)
            alert(test.offsetHeight);      
            alert(document.body.offsetHeight) 
         }


    offsetHeight:
    FF:700,552,602,502,1002
    IE:700,552,602,502,1002
    这个属性好办,因为在测试中IE跟火狐的结果是一样的,均表示是自身的高度,如果有设置boder的话还应该加上boder的值,因为除了test4这个div外,其他的div均有设置border=1px,所以552=550+2,其他的均一样.

    嘿嘿,综上所述,clientHeight与height的区别是如果有滚动条时应减去滚动条的17px不可用部分,offsetHeight与Height的区别是增加了boder的高度,ScrollHeihgt与Height的区别是火狐下与offsetHeight一致,IE下如上所述.

    2. jquery的各种高度

    1. $(window).width()与$(window).height()

    $(window).width()与$(window).height():获得的是屏幕可视区域的宽高,不包括滚动条与工具条。
    
    $(window).width() = width + padding
    $(window).height() = height + padding

    2. document.documentElement.clientWidth与document.documentElement.clientHeight

    document.documentElement.clientWidth与document.documentElement.clientHeight:
    获得的是屏幕可视区域的宽高,不包括滚动条与工具条,跟jquery的(window).width()与(window).height()获得的结果是一样的。 document.documentElement.clientWidth
    = width + padding document.documentElement.clientHeight = height + padding

    3. window.innerWidth与window.innerHeight

    window.innerWidth与window.innerHeight:
    获得的是可视区域的宽高,但是window.innerWidth宽度包含了纵向滚动条的宽度,window.innerHeight高度包含了横向滚动条的高度(IE8以及低版本浏览器不支持)。 window.innerWidth
    = width + padding + border + 纵向滚动条宽度 window.innerHeight = height + padding + border + 横向滚动条高度

    4. window.outerWidth与window.outerHeight

    window.outerWidth与window.outerHeight:获得的是加上工具条与滚动条窗口的宽度与高度。
    
    window.outerWidth = width + padding + border + 纵向滚动条宽度,即是浏览器宽度
    window.outerHeight = height + padding + border + 横向滚动条高度 + 工具条高度,
    即是
    浏览器高度

    来说一说$(document)和$(window)

    $(document).height();//整个网页的高度
    $(window).height();//浏览器可视窗口的高度
    $(window).scrollTop();//浏览器可视窗口顶端距离网页顶端的高度(垂直偏移)

    用一句话理解就是:当网页滚动条拉到最低端时,

    $(document).height() == $(window).height() + $(window).scrollTop()。

    注意,是拉到最低端!

    当网页高度不足浏览器窗口时$(document).height()返回的是$(window).height()

    假如您要获取整个网页的高度,不建议用$("html").height()、$("body").height()的高度,

    原因:

    $("body").height():body可能会有边框,获取的高度会比$(document).height()小; $("html").height():在不同的浏览器上获取的高度的意义会有差异,说白了就是浏览器不兼容。

    说道这里,提及边框和margin还有padding,我们自然想到了jquery的另外的两个高度,那就是innerHeight()和outerHeight()

    innerHeight()和outerHeight()不适用于window 和 document对象,对于window 和 document对象可以使用.height()代替。innerHeight()和outerHeight()主要用来获取标签的高度。

    innerHeight()

    innerHeight:高度+补白
    
    outerHeight:高度+补白+边框,参数为true时:高度+补白+边框+边距

    innerHeight(value)

    这个“value”参数可以是一个字符串(数字加单位)或者是一个数字,如果这个“value”参数只提供一个数字,jQuery会自动加上像素单位(px)。如果只提供一个字符串,任何有效的CSS尺寸都可以为高度赋值(就像100px, 50%, 或者 auto)。注意在现代浏览器中,CSS高度属性不包含padding, border, 或者 margin, 除非box-sizingCSS属性被应用。

    jquery高度,放到浏览器中试一下

    复制代码
    alert($(window).height());                           //浏览器当前窗口可视区域高度
    alert($(document).height());                        //浏览器当前窗口文档的高度
    alert($(document.body).height());                //浏览器当前窗口文档body的高度
    alert($(document.body).outerHeight(true));  //浏览器当前窗口文档body的总高度 包括border padding margin
    alert($(window).width());                            //浏览器当前窗口可视区域宽度
    alert($(document).width());                        //浏览器当前窗口文档对象宽度
    alert($(document.body).width());                //浏览器当前窗口文档body的宽度
    alert($(document.body).outerWidth(true));  //浏览器当前窗口文档body的总宽度 包括border padding margin
    复制代码

    javascript的各种高度

    复制代码
    网页可见区域宽[仅针对body]: document.body.clientWidth
    网页可见区域高[仅针对body]: document.body.clientHeight
    网页可见区域宽[仅针对body]: document.body.offsetWidth (包括滚动条和边框,若滚动条和边框为0,则和clientWidth相等)
    网页可见区域高[仅针对body]: document.body.offsetHeight (包括滚动条和边框,若滚动条和边框为0,则和clientHeight相等)
    可视窗口宽度(包括滚动轴宽度):window.innerWidth; //IE9+、Chrome、Firefox、Opera 以及 Safari
    可视窗口高度,不包括浏览器顶部工具栏: window.innerHeight;//IE9+、Chrome、Firefox、Opera 以及 Safari
    网页正文全文宽(不包括滚动轴的宽度): document.body.scrollWidth
    网页正文全文高:document.body.scrollHeight
    //假如网页中没有滚动轴,document.body.scrollWidth和window.innerWidth相等,document.body.scrollHeight和window.innerHeight相等。
    网页被卷去的高: document.body.scrollTop
    网页被卷去的左: document.body.scrollLeft
    网页正文部分上: window.screenTop
    网页正文部分左: window.screenLeft
    屏幕分辨率的高(整个屏幕的高度): window.screen.height
    屏幕分辨率的宽(整个屏幕的宽度): window.screen.width
    屏幕可用工作区高度: window.screen.availHeight
    屏幕可用工作区宽度: window.screen.availWidth
    整个浏览器可用工作区高度: window.outerHeight
    整个浏览器可用工作区宽度: window.outerWidth
     

    1.scrollWidth & scrollHeight

    这两个属性是元素的内容区域加上内边距,在加上任何溢出内容的尺寸.

    因此,如果没有溢出时,这些属性与clientWidth和clientHeight是相等的。

    2.scrollLeft & scrollTop

    指定的是元素的滚动条的位置

    scrollLeft和scrollTop都是可写的属性,通过设置它们来让元素中的内容滚动。

    3.offsetWidth & offsetHeight

    返回本身的宽高 + padding + border + 滚动条

    4.offsetLeft & offsetTop

    所有HTML元素拥有offsetLeft和offsetTop属性来返回元素的X和Y坐标

    1.相对于已定位元素的后代元素和一些其他元素(表格单元),这些属性返回的坐标是相对于祖先元素
    2.一般元素,则是相对于文档,返回的是文档坐标
    
    offsetParent属性指定这些属性所相对的父元素,如果offsetParent为null,则这些属性都是文档坐标
    //用offsetLeft和offsetTop来计算e的位置
    function getElementPosition(e){
        var x = 0,y = 0;
        while(e != null) {
            x += e.offsetLeft;
            y += e.offsetTop;
            e = e.offsetParent;
        }
        return {
            x : x,
            y : y
        };
    }

    3

  • 相关阅读:
    Swift _ OC _ 混编
    CoreAnimation 寄宿图
    CoreAnimation 开篇
    iOS 杂笔-26(苹果禁用热更新)
    Swift_TableView(delegate,dataSource,prefetchDataSource 详解)
    Swift_ScrollView _ API详解
    插入排序_c++
    选择排序_c++
    冒泡排序_c++
    Swift_协议
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/7072481.html
Copyright © 2020-2023  润新知