使用jquery获取元素相对于视口的位置
获取页面上元素相对于视口(而不是文档)的位置的正确方法是什么? jQuery.offset
函数似乎很有前途:
获取第一个元素的当前坐标,或者设置 匹配元素集中每个元素的相对坐标 到文档。
但这是相对于文件而言的。是否有返回相对于视口的偏移量的等效方法?
What's the proper way to get the position of an element on the page relative to the viewport (rather than the document). jQuery.offset
function seemed promising:
Get the current coordinates of the first element, or set the
coordinates of every element, in the set of matched elements, relative
to the document.
But that's relative to the document. Is there an equivalent method that returns offsets relative to the viewport?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
确定元素的大小和位置的最简单方法是调用其
getBoundingClientRect() 方法。此方法返回视口坐标中的元素位置。它不需要任何参数并返回一个对象
属性左、右、上和下。 left 和 top 属性给出了 X 和 Y
元素左上角坐标以及right和bottom属性
给出右下角的坐标。
element.getBoundingClientRect(); // 获取视口坐标中的位置
到处都支持。
The easiest way to determine the size and position of an element is to call its
getBoundingClientRect() method. This method returns element positions in viewport coordinates. It expects no arguments and returns an object with
properties left, right, top, and bottom. The left and top properties give the X and Y
coordinates of the upper-left corner of the element and the right and bottom properties
give the coordinates of the lower-right corner.
element.getBoundingClientRect(); // Get position in viewport coordinates
Supported everywhere.
这里有两个函数可以在不使用(臃肿的)尺寸插件的情况下获取页面高度和滚动量(x,y):
Here are two functions to get the page height and the scroll amounts (x,y) without the use of the (bloated) dimensions plugin:
jQuery.offset
需要与scrollTop
和scrollLeft
如下图所示:演示:
jQuery.offset
needs to be combined withscrollTop
andscrollLeft
as shown in this diagram:Demo:
查看 Dimensions 插件,特别是
scrollTop()
/scrollLeft()
。可以在 http://api.jquery.com/scrollTop 找到信息。Look into the Dimensions plugin, specifically
scrollTop()
/scrollLeft()
. Information can be found at http://api.jquery.com/scrollTop.这是一个计算视口中元素当前位置的函数:
返回值的计算方式如下:
用法:
演示:
Here is a function that calculates the current position of an element within the viewport:
The return values are calculated like this:
Usage:
Demo:
我发现 cballou 的答案在 2014 年 1 月起不再在 Firefox 中工作。具体来说,如果客户端向右滚动而不是向下滚动,则
if (self.pageYOffset)
不会触发 - 因为0
是一个错误的数字。由于 Firefox 支持document.body.scrollLeft
/Top
,这一点在一段时间内未被检测到,但这对我来说不再有效(在 Firefox 26.0 上)。这是我修改后的解决方案:
在 FF26、Chrome 31、IE11 中测试并工作。几乎可以肯定,它们适用于所有旧版本。
I found that the answer by cballou was no longer working in Firefox as of Jan. 2014. Specifically,
if (self.pageYOffset)
didn't trigger if the client had scrolled right, but not down - because0
is a falsey number. This went undetected for a while because Firefox supporteddocument.body.scrollLeft
/Top
, but this is no longer working for me (on Firefox 26.0).Here's my modified solution:
Tested and working in FF26, Chrome 31, IE11. Almost certainly works on older versions of all of them.