zoukankan      html  css  js  c++  java
  • 从动态获取div高度的问题展开来看

    ps 可能篇幅比较长,请大家耐心看看

    今天有人在群里问我 动态获取高度怎么获取  我就说jq中的outerHeight、 height 、innerHeight   原生的height clientHeight、scrollHeight、offsetHeight  按道理百度一下 就ok 了  但是他问了一句这些有什么区别? 哎呦 我去 我还真的需要整理一下   好吧 咱们开始整理一下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
        </style>
    </head>
    <body>
        <div id="div1"></div>
    </body>
    </html>

    咱们先弄一个div放在这里   然后测试一下这些的区别 然后总结一下

    这个是火狐中的盒模型解析出来的结果 请看好

    下边咱们开始 直接写js  开始测试

    先说一下这个height (因为他奇葩)有两点

    1、height:

    (1)其实Height高度跟其他的高度有点不一样,在javascript中它是属于对象的style对象属性中的一个成员,它的值是一个字符类型的,而另外 三个高度的值是int类型的,它们是对象的属性.因此这样document.body.height就会提示undenifine,而必须写成 document.body.style.height   (好坑)

    (2)只能在div在行内样式设置了height才能获取到(注意是行内 )----------->更坑

    那么关于height的代码咱们发一下 (实际项目中应该用不到这么坑的东西了吧)

    所以这个height 你在行内写了多少就是多少了(当然没有padding  border之类的计算了)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red; }
        </style>
    </head>
    <body>
        <div id="div1" style="height:200px"></div>
        <script type="text/javascript">
        window.onload=function  () {
            var oDiv =document.getElementById('div1');
            alert( oDiv.style.height)//200
        }
        </script>
    </body>
    </html>

    2、clientHeight: 是可见区域的宽度  也就是算上padding    不算border 的

    window.onload=function  () {
            var oDiv =document.getElementById('div1');
            alert( oDiv.clientHeight)
    }//结果也是200

    3、scrollHeight:它其实就是滚动条可滚动的部分还要加上boder的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.

    我测试以后 发现火狐和谷歌都是不一样的数值  哎。。看来这个是不好用的  那就不上代码了  忽略它吧  倒是有很多项目中有获取到屏幕的顶部的距离这个效果之类的 等下次再说(感觉已写 就写出来的多了)

    4、offsetHeight:均表示是自身的高度,如果有设置boder和padding的话还应该加上boder的值(例子中没有写padding 你可以自己加上是计算在内的)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red;  }
        </style>
    </head>
    <body>
        <div id="div1" ></div>
        <script type="text/javascript">
        window.onload=function  () {
            var oDiv =document.getElementById('div1');
            alert( oDiv.offsetHeight)//202 加上border
        }
        </script>
    </body>
    </html>

    好了原生的写完了 看一下就知道怎么回事了

    下边开始说jq方法 看看封装以后是怎么样的

    1、outerHeight:api 解释的很详细啊

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red;  }
        </style>
    </head>
    <body>
        <div id="div1" ></div>
        <script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>//百度的cdn
        <script type="text/javascript">
        $(function  () {
            alert($("#div1").outerHeight());//202
        })
        </script>
    </body>
    </html>

    如果不设置为true的话 那么计算外部高度就是本身的200px+边框的2px ------->=202px;

    如果你设置为true的话那么结果就是222 就加上了内边距20px

    2、height:详细的api啊

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red;  }
        </style>
    </head>
    <body>
        <div id="div1" ></div>
        <script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
        <script type="text/javascript">
        $(function  () {
            alert($("#div1").height());//200px
        })
        </script>
    </body>
    </html>

    看着和js中的height是一样的啊 (除了原生的那两点坑爹)结果是一样的  而且jq还能直接设置数值 也就说获取之后可以直接设置他的height

    3、innerHeight:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>动态获取div的高度问题</title>
        <style type="text/css">
            *{margin:0; padding: 0; border: none; }
            body{padding: 100px;}
            #div1{width: 200px; height: 200px; margin:10px; border: 1px solid red;  padding: 10px; }
        </style>
    </head>
    <body>
        <div id="div1" ></div>
        <script type="text/javascript"src="http://libs.baidu.com/jquery/2.0.3/jquery.min.js"></script>
        <script type="text/javascript">
        $(function  () {
            alert($("#div1").innerHeight());//220px
        })
        </script>
    </body>
    </html>

    也就是说 会把当前的height数值加上内边框

    总结: 写完了。。。。。。。。

  • 相关阅读:
    PHP的超全局变量
    Python 切片
    Python for else语句 以及 break和continue
    niceScroll 滚动条的用法
    python 短路求值或惰性求值
    python 中的 __name__
    python3 中的Counter函数
    谷歌浏览器 F12
    python reversed()的使用
    python字符串格式化% 操作符 {}操作符
  • 原文地址:https://www.cnblogs.com/ling-du/p/4564697.html
Copyright © 2011-2022 走看看