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

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

復(fù)制代碼 代碼如下:
//取得元素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;
}

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

不過它在IE的標準模式存在一個奇怪的問題,html元素是有border的,默認是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中進行):

1、標準模式,沒有重設(shè)html的border

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
2、標準模式,重設(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中摳出來,就后就用它獲取頁面元素的坐標,比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相當于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技術(shù)javascript 精確獲取頁面元素的位置,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 国产美女又黄又爽又色视频网站 | 超碰视频97av | 国产精品一区二区人妻无码 | 国产亚洲精品97在线视频一 | FREESEXVIDEO 性老少配 | 夜夜国产亚洲视频香蕉 | 精品少妇爆AV无码专区 | 任你躁国语自产二区在线播放 | 亚洲另类欧美综合在线 | 亚洲精品天堂在线 | 最新毛片网 | 孕交videosgratis乌克兰 | 91青青草原 | 回复术士人生重启在线观看 | 高h gl肉文| 亚洲视频黄 | 俄罗斯aaaaa一级毛片 | xxxxxx日本处大片免费看 | 日日操夜夜操狠狠操 | 果冻传媒视频在线播放 免费观看 | 日韩免费视频一区 | 久久91精品国产91久久户 | 欧洲最大无人区免费高清完整版 | 被滋润的艳妇疯狂呻吟白洁老七 | 樱花之恋动漫免费观看 | 97在线视频免费 | 国产亚洲精品 在线视频 香蕉 | 红番阁免费观看 | 成人影院久久久久久影院 | 亚洲AV久久无码精品九号 | 好大好硬好湿再深一点网站 | 孕妇高潮抽搐喷水30分钟 | 绞尽奶汁by菊花开 | 欧美亚洲综合另类无码 | 99久久精品费精品蜜臀AV | 小泽玛丽av无码观看 | 亚洲成AV人电影在线观看 | 欧美一区二区视频97色伦 | my pico未删减在线观看 | 99在线精品国自产拍 | 无颜之月5集全免费看无删除 |