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

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

復制代碼 代碼如下:
//取得元素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/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、標準模式,沒有重設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 精確獲取頁面元素的位置,轉載需保留來源!

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

主站蜘蛛池模板: china野外18:19 | 99久久婷婷国产综合精品青草 | 亚洲免费无码av线观看 | 久久大综合 | 97超级碰久久久久香蕉人人 | 果冻传媒在线完整免费播放 | 神马伦理2019影院不卡片 | 在线高清电影理论片4399 | 精品国产麻豆免费人成网站 | 荡乳乱公小说 | 国产成人国产在线观看入口 | 一二三四免费中文在线1 | 青青草原在线免费 | 老师掀开短裙让我挺进动态 | 青草久久久 | 欧美成 人 网 站 免费 | 亚洲综合久久一本伊伊区 | 亚洲成色爱我久久 | 国产露脸150部国语对白 | 国内精品久久久久影院老司 | 另类重口bdsm日本tv | 欧美丰满少妇久久无码精品 | 亚洲中文字幕在线精品 | 高清不卡伦理电影在线观看 | 污污内射久久一区二区欧美日韩 | 国产一卡 二卡三卡四卡无卡乱码视频 | 教室里的激情电影 | 大桥未久电影在线 | 香港论理午夜电影网 | 欧美性爱-第1页 | JEALOUSVUE成熟老师APP | 手机在线免费观看毛片 | 18禁无遮挡羞羞污污污污免费 | 玉娇龙续集春雪瓶txt免费阅读 | good神马电影伦理午夜 | 久久久无码精品无码国产人妻丝瓜 | qvod伦理片 | 精品国产乱码久久久久久乱码 | 色女孩综合 | 午夜啪啪免费视频 | 久久在精品线影院精品国产 |