最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

javascript精确获取页面元素的位置_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 20:46:40
文档

javascript精确获取页面元素的位置_javascript技巧

javascript精确获取页面元素的位置_javascript技巧: 代码如下: //取得元素x坐标 function pageX(elem) { return elem.offsetParent(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft; } //取得元素y坐标 function pageY(elem) { return elem.off
推荐度:
导读javascript精确获取页面元素的位置_javascript技巧: 代码如下: //取得元素x坐标 function pageX(elem) { return elem.offsetParent(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft; } //取得元素y坐标 function pageY(elem) { return elem.off


代码如下:
//取得元素x坐标
function pageX(elem) {
return elem.offsetParent?(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft;
}
//取得元素y坐标
function pageY(elem) {
return elem.offsetParent?(elem.offsetTop+pageY(elem.offsetParent)):elem.offsetTop;
}

貌似这位大神在出这本书时比较赶,有许多纰漏,最后大神也发觉这两个函数有问题,并没有把它们运用到JQuery中。由于是用累加的方式去计算,只要一个元素出现问题,就有可能层层被大,因此我在精确获取样式属性时就摒弃这种方法。主要误算参照大神的结论:
Handling table border offsets.
Fixed positioned elements.
Scroll offsets within another element.
Borders of overflowed parent elements.
Miscalculation of absolutely positioned elements.

随着新锐浏览器都支持IE的getBoundingClientRect方法,我们得以用更简单更快捷更安全的方法来定位页面元素。getBoundingClientRect返回的是一个集合,分别为元素在浏览器可视区的四个角的坐标。

不过它在IE的标准模式存在一个奇怪的问题,html元素是有border的,默认是2px,并且是不可修改的;怪癖模式是没有的。详见http://msdn.microsoft.com/en-us/library/ms5333(VS.85).aspx This method retrieves an object that exposes the left, top, right, and bottom coordinates of the union of rectangles relative to the client's upper-left corner. In Microsoft Internet Explorer 5, the window's upper-left is at 2,2 (pixels) with respect to the true client.

我们做一些测试(请分别在IE6与IE8中进行):

1、标准模式,没有重设html的border

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
2、标准模式,重设html的border

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
3、怪癖模式,没有重设html的border

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
4、怪癖模式,重设html的border

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
John Resig给出的方案就是用clientTop,clientLeft作减值。以下函数就是从JQuery中抠出来,就后就用它获取页面元素的坐标,比offset大法安全多了。
代码如下:
var getCoords = function(el){
var box = el.getBoundingClientRect(),
doc = el.ownerDocument,
body = doc.body,
html = doc.documentElement,
clientTop = html.clientTop || body.clientTop || 0,
clientLeft = html.clientLeft || body.clientLeft || 0,
top = box.top + (self.pageYOffset || html.scrollTop || body.scrollTop ) - clientTop,
left = box.left + (self.pageXOffset || html.scrollLeft || body.scrollLeft) - clientLeft
return { 'top': top, 'left': left };
};

其中self.pageYOffset相当于window.self.pageYOffset,是火狐的一个属性,相当于document.body.scrollTop。以下是它的定义:
Definition: The pageYOffset property is used to determine the Y coordinate of the scroll position in some browsers. This is not a reserved word so you can declare your own variable or function called pageYOffset but if you do then you will not be able to find or alter the scroll position of a window in some browsers

文档

javascript精确获取页面元素的位置_javascript技巧

javascript精确获取页面元素的位置_javascript技巧: 代码如下: //取得元素x坐标 function pageX(elem) { return elem.offsetParent(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft; } //取得元素y坐标 function pageY(elem) { return elem.off
推荐度:
标签: 位置 得到 元素
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top