天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

javascript 精確獲取頁面元素的位置

復(fù)制代碼 代碼如下:
//取得元素x坐標(biāo)
function pageX(elem) {
return elem.offsetParent?(elem.offsetLeft+pageX(elem.offsetParent)):elem.offsetLeft;
}
//取得元素y坐標(biāo)
function pageY(elem) {
return elem.offsetParent?(elem.offsetTop+pageY(elem.offsetParent)):elem.offsetTop;
}

貌似這位大神在出這本書時(shí)比較趕,有許多紕漏,最后大神也發(fā)覺這兩個(gè)函數(shù)有問題,并沒有把它們運(yùn)用到JQuery中。由于是用累加的方式去計(jì)算,只要一個(gè)元素出現(xiàn)問題,就有可能層層被大,因此我在精確獲取樣式屬性時(shí)就摒棄這種方法。主要誤算參照大神的結(jié)論:
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返回的是一個(gè)集合,分別為元素在瀏覽器可視區(qū)的四個(gè)角的坐標(biāo)。

不過它在IE的標(biāo)準(zhǔn)模式存在一個(gè)奇怪的問題,html元素是有border的,默認(rèn)是2px,并且是不可修改的;怪癖模式是沒有的。詳見http://msdn.microsoft.com/en-us/library/ms536433(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中進(jìn)行):

1、標(biāo)準(zhǔn)模式,沒有重設(shè)html的border

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
2、標(biāo)準(zhǔn)模式,重設(shè)html的border

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
3、怪癖模式,沒有重設(shè)html的border

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
4、怪癖模式,重設(shè)html的border

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
John Resig給出的方案就是用clientTop,clientLeft作減值。以下函數(shù)就是從JQuery中摳出來,就后就用它獲取頁面元素的坐標(biāo),比offset大法安全多了。
復(fù)制代碼 代碼如下:
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相當(dāng)于window.self.pageYOffset,是火狐的一個(gè)屬性,相當(dāng)于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技術(shù)javascript 精確獲取頁面元素的位置,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品久久一区二区三区蜜桃 | 久久久久亚洲精品影视 | 洗濯屋H纯肉动漫在线观看 羲义嫁密着中出交尾gvg794 | 国产亚洲精品97在线视频一 | 国产成人精视频在线观看免费 | 免费可以看污动画软件 | 久久re这里视频精品8 | 成年免费三级视频 | 蜜桃久久久亚洲精品成人 | 国产麻豆福利AV在线观看 | 国产人妖一区二区 | 国产精品女上位好爽在线短片 | 欧美性xxxxxx爱 | 欧美精品3atv一区二区三区 | 视频一区二区三区蜜桃麻豆 | 97国产精品人妻无码免费 | 国产人妻人伦精品熟女麻豆 | 草莓视频在线看免费高清观看 | 最近更新2019中文字幕免费 | 欧美九十老太另类 | 狠狠啪 日日啪 | 在线观看国产视频 | 菠萝视频高清版在线观看 | 久久精品国产亚洲AV影院 | 中文字幕在线不卡精品视频99 | 含羞草最新版本 | 51精品少妇人妻AV一区二区 | 欧美の无码国产の无码影院 | 最近高清日本免费 | 寂寞夜晚免费观看视频 | 久久精品在现线观看免费15 | 伸进同桌奶罩里摸她胸作文 | av女优快播| 国产偷国产偷亚州清高 | 解开白丝老师的短裙猛烈进入 | 国产午夜精品AV一区二区麻豆 | 久久婷婷五月综合色情 | 色狗av影院 | 无人区日本电影在线观看 | JAPANRCEP老熟妇乱子伦视频 | 花蝴蝶高清观看免费 |