JavaScript DOM元素尺寸与位置获取:offset、client与scroll系列详解

作者:像素猫

时间:2026-10-24

浏览:547

本文详细解析JavaScript中获取元素尺寸与位置的三大核心系列:offset、client和scroll。通过对比offsetWidth与style.width的区别,以及client系列不包含边框、scroll系列反映实际内容高度的特性,结合代码示例说明各属性的返回值含义及滚动事件的应用场景,帮助开发者精准掌握网页特效开发中的元素测量技巧。

文章目录

一、元素偏移量 offset 系列

offset 意为偏移量,利用该系列属性可以动态获取元素的位置(偏移)及尺寸大小。

  • 用于获取元素相对于带有定位属性父元素的距离。
  • 用于获取元素自身的宽度和高度。
  • 注意:上述属性返回的数值均不带单位。

offset 系列常用的属性包括:

一、元素偏移量 offset 系列

以下示例设定一个子盒子嵌套在父盒子中,并赋予具体尺寸,演示各属性的获取方式:


    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .father{
            position: relative;
            margin-left: 50px;
            margin-top: 10px;
            width: 200px;
            height: 200px;
            background-color: brown;
        }
        .son{
            width: 100px;
            height: 100px;
            background-color: cornflowerblue;
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <script>
        var father = document.querySelector('.father');
        var son = document.querySelector('.son')
        console.log('father.offsetLeft',father.offsetLeft);
        console.log('father.offsetTop',father.offsetTop);
        console.log('son.offsetWidth',son.offsetWidth);
        console.log('son.offsetHeight',son.offsetHeight);
    </script>
</body>

控制台打印结果如下:

一、元素偏移量 offset 系列

虽然 style 属性也能获取部分相关属性,但 offset 与 style 存在显著差异,具体对比如下:

offset

  • offset 能够获取任意样式表(包括外部CSS)中定义的样式值。
  • offset 系列返回的数值均为纯数字,不包含单位。
  • offsetWidth 的计算包含 width、padding 和 border 的总和。
  • offsetWidth 等属性为只读属性,仅支持读取,不支持赋值操作。

style

  • style.width 返回的是带有单位的字符串(如 '100px')。
  • style.width 仅获取 width 的值,不包含 padding 和 border。
  • style.width 是可读写属性,既可用于获取也可用于赋值。

二、元素可视区 client 系列

client 意为客户端,利用该系列属性可动态获取元素可视区域的相关信息,包括边框大小及元素尺寸。

一、元素偏移量 offset 系列

一、元素偏移量 offset 系列

以下示例展示一个带有边框的盒子,并输出相关属性值:


<style>
        .box{
            width: 200px;
            height: 200px;
            background-color: darkorchid;
            border: 20px solid #ccc;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
<script>
    var box = document.querySelector('.box')
    console.log('box.clientWidth:'+box.clientWidth);
    console.log('box.clientWidth:'+box.clientWidth);
    console.log('box.clientWidth:'+box.clientWidth);
    console.log('box.clientTop:'+box.clientTop);
</script>

运行结果如下:

一、元素偏移量 offset 系列

观察结果可知,通过 client 系列获取的盒子尺寸不包含边框宽度。

三、元素滚动 scroll 系列

scroll 意为滚动,利用该系列属性可动态获取元素的大小及滚动距离等信息。

一、元素偏移量 offset 系列

沿用上述案例盒子,打印其 scroll 系列属性以观察结果:


 <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: darkorchid;
            border: 20px solid #ccc;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
<script>
    var box = document.querySelector('.box')
    console.log('box.scrollWidth:'+box.scrollWidth);
    console.log('box.scrollHeight:'+box.scrollHeight);
    console.log('box.scrollLeft:'+box.scrollLeft);
    console.log('box.scrollTop:'+box.scrollTop);
</script>

运行结果如下:

一、元素偏移量 offset 系列

此时获取的盒子宽高与给定值一致,且与 client 系列结果相同。二者的区别在于:当盒子内容超出容器高度时,表现不同。我们在盒内添加超过容器高度的内容:


 <div class="box">
   王欢在学前端<br><br>
   王欢在学前端<br><br>
   王欢在学前端<br><br>
   王欢在学前端<br><br>
   王欢在学前端<br><br>
   王欢在学前端<br><br>
   王欢在学前端
</div>

打印结果如下:

一、元素偏移量 offset 系列

结果显示盒子高度增加,该值代表包含文字内容后的实际高度。

此外,两次打印的 box.scrollLeft 和 box.scrollTop 均为 0,这表示当前未发生滚动。

通过设置 overflow: auto 使超出内容显示滚动条,并添加滚动事件监听器,代码如下:


 var box = document.querySelector('.box')
    box.addEventListener('scroll',function(){
        console.log('box.scrollTop:'+box.scrollTop);
    })

页面效果如下:

一、元素偏移量 offset 系列

滚动时数值随之变化。box.scrollTop 返回的是被卷去的上侧距离,具体示意如下:

一、元素偏移量 offset 系列

以上为 JavaScript 实现三种常用网页特效(offset、client、scroll 系列)的详细内容,更多关于 JavaScript 网页特效的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章