`
zhouyrt
  • 浏览: 1126569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读jQuery之十八(元素位置)

 
阅读更多

 

本篇所读源码版本为1.7.2

 

jQuery中提供了获取设置HTML元素位置的接口方法。如下

 

.offset()

.position()

.offsetParent()

.scrollTop()

.scrollLeft()

 

所有位置相关的代码在项目的offset.js中,总共250行代码。里面还有些未公开的方法,如

 

getOffset()

getWindow()

jQuery.offset.bodyOffset()

jQuery.offset.setOffset()

 

它们之间的关系如下

 

 

 

从图中可以看到两个重要的函数.offset()和.position()都依赖于私有的getOffset()。

.position()还依赖于.offsetParent()。offsetParent通过while循环获取最近的定位父元素(position为非static值)。

 

getOffset()函数根据浏览器是否支持getBoundingClientRect得来。如果支持则使用getBoundingClientRect,否则使用while循环不断计算得出位置值。

 

getBoundingClientRect最早是IE中实现的,后主流浏览器都实现了它。因此后面的else判断基本上用不上,jQuery可考虑去掉该段代码。

 

需要注意下.offset()和.position()的区别

.offset()   相对于document(视口)计算的

.position() 相对于其最近的 定位父元素

 

 

此外,.offset()传入一个对象或函数时可以设置元素的位置(setter),而.position()则仅是获取位置(getter)。

 

.offset()作为getter时,获取dispaly:none的元素top,left都将是零。

.offset()作为setter时,如果没有元素的position(此时值为static),那么.offset()方法会将其设置为“relative”以相对于视口进行重新定位。如下

 

// set position first, in-case top/left are set even on static elem
if ( position === "static" ) {
	elem.style.position = "relative";
}
 

相关:

http://www.w3.org/TR/cssom-view/#the-getclientrects

https://developer.mozilla.org/en/DOM/element.getBoundingClientRect

http://msdn.microsoft.com/en-us/library/ms536433%28VS.85%29.aspx

 

 

  • 大小: 31.8 KB
分享到:
评论

相关推荐

    jQuery Mobile快速入门245页完整版.pdf + 所有源码.7z

    24H内删除,作者写书非常不容易,如觉得好,请购买纸质书籍,易读易懂!藏书不如读书,读书请买好书,这是好书。 第1章 jquery mobile简介  1.1 通用访问  1.2 跨所有移动平台的统一  1.3 简化的标记驱动的...

    JavaScript权威指南(第六版) 清晰-完整

    7.2 数组元素的读和写 7.3 稀疏数组 7.4 数组长度 7.5 数组元素的添加和删除 7.6 数组遍历 7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 ...

    JavaScript权威指南(第6版)(中文版)

    7.2 数组元素的读和写 7.3 稀疏数组 7.4 数组长度 7.5 数组元素的添加和删除 7.6 数组遍历 7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 ...

    JavaScript权威指南(第6版)

    7.2 数组元素的读和写 7.3 稀疏数组 7.4 数组长度 7.5 数组元素的添加和删除 7.6 数组遍历 7.7 多维数组 7.8 数组方法 7.9 ECMAScript 5中的数组方法 7.10 数组类型 7.11 类数组对象 7.12 作为数组的字符串 第8章 ...

    JavaScript权威指南(第6版) 中文版

    7.2 数组元素的读和写 145 7.3 稀疏数组 147 7.4 数组长度 148 7.5 数组元素的添加和删除 149 7.6 数组遍历 149 7.7 多维数组 151 7.8 数组方法 152 7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类...

    JavaScript权威指南(第6版)

    7.2 数组元素的读和写 145 7.3 稀疏数组 147 7.4 数组长度 148 7.5 数组元素的添加和删除 149 7.6 数组遍历 149 7.7 多维数组 151 7.8 数组方法 152 7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类...

    JavaScript权威指南(第6版)中文文字版

    7.2 数组元素的读和写 145 7.3 稀疏数组 147 7.4 数组长度 148 7.5 数组元素的添加和删除 149 7.6 数组遍历 149 7.7 多维数组 151 7.8 数组方法 152 7.9 ecmascript 5中的数组方法 156 7.10 数组类型 160 7.11 类...

    Java开源的下一代社区平台Symphony.zip

    很多系统界面上仍然保持着老式风格,远远没有跟上时代发展的脚步,它们没有创新、好玩的特性,缺少现代化的交互元素和用户体验 大部分系统是从程序员的角度进行设计的,没有考虑实际的产品、运营需求,这类系统...

    大名鼎鼎SWFUpload- Flash+JS 上传

     * 兼容其他JavaScript库 (例如:jQuery, Prototype等);  * 支持Flash 8和Flash 9;  SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的...

Global site tag (gtag.js) - Google Analytics