十分钟快速了解 JS 中的 offset、scroll、client

2019 年 9 月 5 日 前端大全

(给前端大全加星标,提升前端技能

作者:前端下午茶 公号 /  SHERlocked93

在下开发中经常碰到 offset、scroll、client 这几个关键字,比如 offsetLeft、offsetHeight、scrollHeight、clientTop 什么的,每次都要各种实验,这里总结一下,一劳永逸。

首先两张图镇楼,方便随时翻阅

1. offset

offset偏移,包括这个元素在文档中占用的所有显示宽度,包括滚动条、 paddingborder,不包括 overflow隐藏的部分

  1. offsetParent属性返回一个对象的引用,这个对象是距离调用 offsetParent的父级元素中最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素。如果这个容器元素未进行CSS定位, 则 offsetParent属性的取值为根元素的引用。

    1. 如果当前元素的父级元素中没有进行CSS定位(position为 absolute/relative), offsetParent 为 body

    2. 如果当前元素的父级元素中有CSS定位( position 为 absolute/relative), offsetParent 取父级中最近的元素

  2. obj.offsetWidth 指 obj 控件自身的绝对宽度,不包括因 overflow 而未显示的部分,也就是其实际占据的宽度,整型,单位:像素。

    offsetWidth = border-width*2+ padding-left+ width+ padding-right

  3. obj.offsetHeight 指 obj 控件自身的绝对高度,不包括因 overflow 而未显示的部分,也就是其实际占据的高度,整型,单位:像素。

    offsetHeight = border-width*2+ padding-top+ height+ padding-bottom

  4. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位:像素。

    offsetTop= offsetParent的padding-top + 中间元素的offsetHeight + 当前元素的margin-top

  5. obj.offsetLeft 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置,整型,单位:像素。

    offsetLeft= offsetParent的padding-left + 中间元素的offsetWidth + 当前元素的margin-left


2. scroll

scroll滚动,包括这个元素没显示出来的实际宽度,包括 padding,不包括滚动条、 border

  1. scrollHeight 获取对象的滚动高度,对象的实际高度;

  2. scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离

  3. scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离

  4. scrollWidth 获取对象的滚动宽度


3. client

client指元素本身的可视内容,不包括 overflow被折叠起来的部分,不包括滚动条、 border,包括 padding

  1. clientWidth 对象可见的宽度,不包括滚动条等边线,会随窗口的显示大小改变

  2. clientHeight 对象可见的高度

  3. clientTopclientLeft 这两个返回的是元素周围边框的厚度,一般它的值就是0。因为滚动条不会出现在顶部或者左侧



推荐阅读

(点击标题可跳转阅读)

Vue 组件数据通信方案总结

Web 页面录屏实现

JavaScript Errors 指南


觉得本文对你有帮助?请分享给更多人

关注「前端大全」加星标,提升前端技能

好文章,我在看❤️

登录查看更多
1

相关内容

Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
70+阅读 · 2020年5月5日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
已删除
架构文摘
3+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
React Native 分包哪家强?看这文就够了!
程序人生
12+阅读 · 2019年1月16日
这一次,彻底解决滚动穿透
IMWeb前端社区
34+阅读 · 2019年1月4日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
一次 PyTorch 的踩坑经历,以及如何避免梯度成为NaN
Arxiv
14+阅读 · 2020年2月6日
Arxiv
4+阅读 · 2019年12月2日
Single-frame Regularization for Temporally Stable CNNs
Generalization and Regularization in DQN
Arxiv
6+阅读 · 2019年1月30日
VIP会员
相关VIP内容
Python计算导论,560页pdf,Introduction to Computing Using Python
专知会员服务
70+阅读 · 2020年5月5日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
相关资讯
手把手教你用Python实现“坦克大战”,附详细代码!
机器学习算法与Python学习
11+阅读 · 2019年6月8日
已删除
架构文摘
3+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
React Native 分包哪家强?看这文就够了!
程序人生
12+阅读 · 2019年1月16日
这一次,彻底解决滚动穿透
IMWeb前端社区
34+阅读 · 2019年1月4日
深度学习线性代数简明教程
论智
11+阅读 · 2018年5月30日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
一次 PyTorch 的踩坑经历,以及如何避免梯度成为NaN
Top
微信扫码咨询专知VIP会员