最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • DOM 元素“大小”

    正文概述 掘金(GZlaoBen)   2021-02-10   523

    一、偏移量 (offset dimension)

    元素的偏移量

    偏移量,包括元素在屏幕上占用的所有可见空间。元素的可见大小由其高度、宽度决定,包括内容 content 大小、内边距 padding、滚动条 scrollbar 大小、边框 border 大小,不包括外边距 margin

    通过下列 4 个属性可以取得元素的偏移量:

    • offsetHeight :元素在垂直方向上占用的空间大小,以像素计算。包括元素的高度、(可见的)水平滚动条的高度、上下边框高度。
    • offsetWidth :元素在水平方向上占用的空间大小,以像素计算。包括元素的宽度、(可见的)垂直滚动条的高度、左右边框的宽度。
    • offsetLeft :元素的左外边框至包含元素 offsetParent 的左内边框之间的像素距离。
    • offsetTop :元素的上外边框至包含元素 offsetParent 的上内边框之间的像素距离。

    其中,MDN 对 offsetParent 的定义是:

    需要补充的是,元素的 positionfixed 时,offsetParent 也返回 null。元素 body 的 offsetParent 也返回 null

    DOM 元素“大小”

    元素在整个页面上的偏移量:相对于文档的坐标

    想要获取元素在页面上的偏移量,即元素在页面上的绝对横纵坐标,可以通过累加该元素及其各层包含元素的 offsetTopoffsetLeft 即可。示例代码如下:

    function getElementLeft(element) {
        var actualLeft = element.offsetLeft;
        var current = element.offsetParent;
    
        while (current !== null) {
            actualLeft += current.offsetLeft;
            current = current.offsetParent;
        }
    
        return actualLeft;
    }
    
    function getElementTop(element) {
        var actualTop = element.offsetTop;
        var current = element.offsetParent;
    
        while (current !== null) {
            actualTop += current.offsetTop;
            current = current.offsetParent;
        }
    
        return actualTop;
    }
    

    需要注意的是,对于使用表格和内嵌框架布局的页面,由于不同浏览器实现这些元素的方式不同,因此得到的值不一定可信。另外,如果其中一层包含元素出现滚动条,这两个函数计算的值也不可用。

    只读

    所有的偏移量属性都是只读的,而且每次访问它们都需要重新计算。因此,我们应该尽量避免重复访问这些属性,以降低浏览器性能负担。在元素内容稳定的情况下,如果需要重复访问当中的某些属性值,我们应当将其保存为局部变量以提高性能。

    二、客户区大小 (client dimension)

    元素的客户区大小,指的是元素内容 content 及其内边距 padding 所占据的空间大小,不包括滚动条占用的空间

    有关客户区大小的属性值有两个:

    • clientWidth :是元素内容区宽度加左右内边距的宽度。
    • clientHeight :是元素内容区高度加上下内边距的高度。

    DOM 元素“大小”

    需要注意的是,客户区大小的属性与偏移量一样都是只读属性,并且每次访问都会重新计算。

    三、滚动大小 (scroll dimension)

    元素的滚动大小,指的是包含滚动内容的元素大小。以下是 4 个与滚动大小相关的属性:

    • scrollHeight :在没有滚动条的情况下,元素内容的总高度。
    • scrollWidth :在没有滚动条的情况下,元素内容的总宽度。
    • scrollLeft :被隐藏在内容区域左侧的像素数。通过设置这个属性可以改变元素的左右滚动位置。
    • scrollTop :被隐藏在内容区域上方的像素数。通过设置这个属性可以改变元素的上下滚动位置。

    DOM 元素“大小”

    举个例子来说明: 带滚动条时,以上图为例,设置了 overflow: auto 的元素是带滚动条的、黑色边框的元素 parent,内部灰色元素是 child。parent.clientHeight 的值为 parent 的内容高度和上下内边框高度之和。但 parent.scrollHeight 等于其内部元素 child 的客户区高度即 child.clientHeight

    四、确定元素大小

    现代浏览器为每个元素都提供了一个便捷的方法 getBoundingClientRect() 来获取元素的大小及位置信息。这个方法返回一个矩形对象 DOMRect。其中包含属性元素左上角的视口坐标 x y、元素四边的视口位置 left top right bottom、元素偏移量大小 width height

    请注意区分上文提到的文档坐标和视口坐标的区别:

    • 文档坐标指的是相对于整个页面文档的坐标位置。
    • 视口坐标指的是相对于浏览器窗口可见视口的坐标位置。

    起源地下载网 » DOM 元素“大小”

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元