`
zhouyrt
  • 浏览: 1171967 次
  • 性别: 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页面滚动元素展现隐藏动画插件

    jQuery的`.animate()`方法是实现动画的核心,它可以改变元素的各种属性,如位置、大小、透明度等。例如,可以使用以下代码让元素在进入视口时淡入: ```javascript $('.animate-element').each(function() { var ...

    读jQuery之五(取DOM元素)

    标题《读jQuery之五(取DOM元素)》指出本文的主题是关于在使用jQuery时如何获取DOM元素。描述部分通过与Prototype.js中的$(xx)调用比较,引出了jQuery中的$()函数使用get方法和toArray方法来获取DOM元素。这些方法...

    jQuery jQuery-UI

    5. **定位**:包含了实用的定位算法,如`.position()`和`.offset()`,用于精确控制元素的位置。 **文件内容概览** - **licence_gpl.txt, license_commercial.txt**:这两个文件可能分别包含了GPL(GNU General ...

    jQuery库.zip

    3. **动画效果**:jQuery的`.animate()`方法可以创建复杂的动画效果,包括改变元素的样式属性如透明度、宽度、高度等,以及移动元素位置。同时,还有`.fadeIn()`、`.slideUp()`等预定义的动画效果。 4. **Ajax交互*...

    基于jquery+canvas实现的拖动插件

    此外,jQuery还提供了链式操作,使得代码更加简洁易读。 在这个名为"h5test"的压缩包中,可能包含以下内容: 1. HTML文件:定义了页面结构和canvas元素。 2. CSS文件:用于样式设置,可能包括拖动元素的外观和页面...

    jQuery API 中文版

    4. **动画效果**:jQuery的`.animate()`方法可以创建平滑的动画效果,如改变元素的位置、大小、透明度等。例如,`$("#myDiv").animate({left: "50px"}, 1000)`将在1秒内将元素移动到左边50像素。 5. **Ajax操作**:...

    Jquery中文帮助文档

    4. **动画效果(Animation)**:`fadeIn()`、`fadeOut()`、`slideToggle()`等方法为元素添加平滑的动画效果,`animate()`可以自定义动画过程,控制元素的各种属性如位置、大小、透明度等。 5. **Ajax交互(Ajax)**...

    jQuery扑克牌读心术网页游戏源码.zip

    在这里,你可以看到关于扑克牌大小、颜色、位置等样式的定义。CSS3的新特性,如动画(@keyframes)和过渡(transition),也可能被用来增强视觉效果。jQuery与CSS的结合,如使用$.css()方法,可以让动态效果更为流畅...

    JQuery整站扒取下来的,方便查询JQuery的API方法

    同时,`.animate()`方法允许自定义动画效果,如改变元素的位置、大小、透明度等。 对于Ajax操作,jQuery的`.ajax()`函数是核心。它封装了XMLHttpRequest对象,使得异步数据交互变得直观。例如,`$.ajax({url: "data...

    jquery-1.4.2库

    此外,$.animate()函数允许开发者自定义复杂的动画效果,包括改变元素的大小、位置、透明度等属性。 六、Ajax请求 jQuery 1.4.2的$.ajax()函数是进行异步数据请求的主要方式,支持GET、POST等多种HTTP方法。$.get...

    Head First Jquery(中文版)

    这些方法可以用于改变元素的可见性、大小、位置等属性,使得网页更具动态性和吸引力。 Ajax是异步JavaScript和XML的缩写,jQuery简化了与服务器端进行数据交换的过程。使用$.ajax()函数,开发者可以轻松地发起Ajax...

    jquery-ui(全)

    2. **Interactions(交互)**: 包括拖放(Draggable)、可排序(Sortable)、可连接(Droppable)等功能,使得用户可以通过鼠标操作来改变元素的位置或进行其他交互。 3. **Widgets(组件)**: 提供了诸如对话框(Dialog)...

    jquery的lightbox效果

    它是实现Lightbox效果的基础,通过使用jQuery,开发者可以编写更简洁、更易读的代码来控制DOM元素。 2. **CSS和HTML结构**:创建Lightbox效果首先需要在HTML中设置必要的结构,通常包括隐藏的大图容器、导航按钮和...

    Jquery包导入即用

    4. **动画效果**:jQuery的`.animate()`方法可以创建复杂的动画效果,如改变元素的位置、大小、透明度等,同时还有`.fadeIn()`, `.slideUp()`等预定义的动画效果。 5. **Ajax交互**:jQuery的`.ajax()`方法简化了...

    jQuery手册1.4.1在线版 - 中文

    5. **动画效果**:jQuery的`.animate()`函数可以创建平滑的动画效果,包括改变元素的大小、位置、颜色等属性。另外,还有`.fadeIn()`, `.fadeOut()`, `.slideToggle()`等预定义的动画方法。 6. **Ajax交互**:...

    JQuery 随意拖动的层

    jQuery通过一种简化的语法,使JavaScript代码更易读、更简洁。例如,`$(selector).action()`是jQuery的基本结构,其中`selector`是选择器,用于定位HTML元素,`action`是执行的操作。 在"JQuery 随意拖动的层"中,...

    jquery弹出框

    jQuery是由John Resig创建的一个轻量级库,它的语法设计目的是使JavaScript代码更加简洁、易读。例如,通过使用"$"符号,我们可以快速选择DOM元素,执行各种操作。例如,`$("selector").function()`,其中"selector...

    常用的jquery案例

    点击任意 `<li>` 元素时,会计算该元素之前的所有同级元素的数量,从而得到该元素在列表中的位置(索引号)。 #### 十一、如何把函数绑定到事件上 **知识点:** - **`.bind()` 方法:** 绑定事件处理程序。 **示例...

Global site tag (gtag.js) - Google Analytics