JS之clientWidth、offsetWidth、scrollHeight的总结及兼容性

clientWidth、clientHeight获取元素的可见宽度和高度,不带px,返回的是一个数字,可以直接进行计算。(包括内容区和内边距padding只读不可修改)

offsetWidth、offsetHeight获取元素的整个宽度和高度包括内容区,内边距和边框。

offsetParent可以用来获取当前元素的定位父元素,最近的开启了定位的元素,如果所有的父元素都没开启,则返回body。

offsetLeft、offsetTop获取当前元素相对于其定位父元素的水平,垂直偏移量。

scrollHeight获取元素整个滚动区域的高度,scrollLeft获取水平滚动条滚动的距离。

对于以上附上代码如下: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #div1{
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>
<button id="btn">点我获取</button>
<div id="div1"></div>
</body>
<script>
    var div1=document.getElementById("div1");
    var btn=document.getElementById("btn");
    btn.onclick=function(){
        var clientwidth=div1.clientWidth;
        var clientheight=div1.clientHeight;
        var offsetwidth=div1.offsetWidth;
        var offsetparent=div1.offsetParent;
        var offsetleft=div1.offsetLeft;
        var scrollheight=div1.scrollHeight;
        var scrollleft=div1.scrollLeft;
        alert("clientwidth="+clientwidth+"," +
            "clientheight="+clientheight+
            ",offsetwidth="+offsetwidth+
            ",offsetparent="+offsetparent+
            ",offsetleft="+ offsetleft+
            ",scrollheight="+scrollheight+
            ",scrollleft="+scrollleft);
    }
</script>
</html>

结果为:
clientwidth=100,clientheight=100,offsetwidth=100,offsetparent=[object HTMLBodyElement],offsetleft=8,scrollheight=100,scrollleft=0

注意:当满足scrollHeight-scrollTop==clientHeight说明垂直滚动条滚动到底了,水平的也一样,可以自己写代码测试一下。

 谷歌下document.body.scrollwidth不是为空,而是出现异常值,解决兼容问题把document.documentElement.scrollTop放前面:

function getPos(ev){
    var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
    var scrollLeft=document.documentElement.scrollLeft || document.body.scrollLeft;
    return {x:ev.clientX+scrollLeft,y:ev.clientY+scrollTop};
}

 学习资源:https://www.cnblogs.com/SharkChilli/p/6915211.html

scrollTop的兼容性及防抖函数:https://www.cnblogs.com/fogwind/p/6363269.html

猜你喜欢

转载自blog.csdn.net/qq_41999617/article/details/82562683