JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

时间:2020-12-02 10:27:32
在ajax中经常需要对元素的位置进行精确的定位,此时不仅需要获取元素自身的大小位置等属性。还需要知道页面、浏览器、滚动条等的长度和宽度。 因为浏览器的兼容问题,如果使用javascript获取这些数值是一个相当痛苦的过程。好在JQuery提供了简单优雅,并且兼容的解决方法。 
获取浏览器和页面文档的宽度和高度 
复制代码代码如下:
//获取浏览器显示区域的高度 
$(window).height(); 
//获取浏览器显示区域的宽度 
$(window).width(); 

//获取页面的文档高度 
$(document.body).height(); 
//获取页面的文档宽度 
$(document.body).width(); 

获取滚动条的位置 
复制代码代码如下:
//获取滚动条到顶部的垂直高度 
$(document).scrollTop(); 
//获取滚动条到左边的垂直宽度 
$(document).scrollLeft(); 

计算位置和偏移量 
offset方法是一个很有用的方法,它返回包装集中第一个元素的偏移信息。默认情况下是相对body的偏移信息。结果包含top和left两个属性。 
offset(options, results) 
options.relativeTo  指定相对计算偏移位置的祖先元素。这个元素应该是relative或absolute定位。省略则相对body。 
options.scroll  是否把滚动条计算在内,默认TRUE 
options.padding  是否把padding计算在内,默认false 
options.margin  是否把margin计算在内,默认true 
options.border  是否把边框计算在内,默认true

最近小剧在学习JQUERY的一些应用,接触到了JQUERY对于元素尺寸及位置定义,还有就是配合浏览器尺寸及状态的计算所做出的一些动画特效。其实像这类JQUERY应用无外乎涉及这些属性的调用:innerHeight()、innerWidth()、outerHeight()、outerHeight(true)、outerHeight(false)、outerWidth(true)、outerWidth(false)、position()、offset()、scrollTop()、scrollLeft()。

单独看每条解释,基本上都能给人很清晰明了的感觉。但是在应用的时候总会引起混淆,特别是position()与offset()。小剧起初也被这些参数绕的脑袋昏昏涨涨的。

小剧感觉在做动画的时候,这些参数特别有用,但一时又搞不太清楚各个参数的细微差别。于是今天就花了半天的时间,对着API仔细分析,自己再动手验证一下自己的想法,拿着一支笔在纸上画来画去,确认无误后,做出了这么两幅图稿。以供以后参考之用。

JQUERY对尺寸的定义查看原文

对于尺寸的定义其实很好理解,只是使用outerHeight()、outerWidth()的参数时容易搞混淆,特别是很容易把默认值false记成true。

下面以高度为例写一下各个尺寸的计算方法,宽度计算方法与之一致。
innerHeight()=【padding-top】+【height】+【padding-bottom】
outerHeight()=outerHeight(false)=【border-top-width】+【padding-top】+【height】+【padding-bottom】+【border-bottom-width】
outerHeight(true)=【margin-top】+【border-top-width】+【padding-top】+【height】+【padding-bottom】+【border-bottom-width】+【margin-bottom】

JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合JQUERY对位置的定义查看原文

这里小剧用一种假想电脑屏幕可以向上延伸的思想来解释JQUERY对位置的定义。对于很多初学者很难理解$(document).scrollTop(),相信小剧用这张图来解释滚动高度,很多人一眼就能看明白这个高度究竟指的是哪一段长度。其实srcollTop()并不仅限于浏览器的滚动条,任何自身设置了固定高度,并且overflow的值为hidden的元素,都可以使用此属性。

对于position()和offset(),唯一的区别就是offset()针对的是元素相对于浏览器的偏移,而position()针对的是元素相对有定位的父级元素的偏移。说简单了就是相对设置了position为relative或absolute的父级,然而很多情况是并没有任何父级元素设置了定位,此时position()和offset()就是相同的了,但我们在写代码的时候应该很清楚的知道该用哪一个,以避免后期维护时所带来的不便。

图例里只写了高度的解释,宽度与高度的解读方式一致,你可以自己去理解。

JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

当然,上面这些仅仅是剧中人对JQUERY位置与尺寸的一点理解,可能有不准确或错误的的地方,为了避免误人子弟,欢迎您与小剧分享你的想法。