2013-08-02 101 views
0

我使用下面的JavaScript函數來獲取元素IE中元素問題的位置?

function findPos(obj) { 
    var curleft = 0; 
    if (obj.offsetParent) { 
     while (1) { 
      curleft += obj.offsetLeft; 
      if (!obj.offsetParent) { 
       break; 
      } 
      obj = obj.offsetParent; 
     } 
    } 
} 

功能在IE除外。在IE瀏覽器的所有工作正常的absoulte位置也工作在全屏正常,但當瀏覽器被調整那麼這個方法返回不正確的偏移

能否請你幫我出這個

+0

爲什麼不使用'while(obj){'爲了讓你的代碼更簡潔 – bugwheels94

+0

請指定你正在測試的IE版本。 (也檢查它是否在怪異模式) – Spudley

+0

我正在使用IE8和IE9版本。問題是與兩個verisons 8和9.在全屏幕,它是正確返回絕對位置,但當我做瀏覽器調整大小時,它返回不正確值 – kishore

回答

2

我會建議你使用offsetParent/Top/Left切換到利用getBoundingClientRect()功能(略增強)。它應該更高性能,因爲你不必循環DOM,它應該在瀏覽器中返回正確的結果。

你findPos功能應該是這樣的:

function findPos(obj) { 
    var gbcr = obj.getBoundingClientRect(), 
     dE = document.documentElement, 
     b = document.body, 
     scrollY = window.pageYOffset || dE.scrollTop || b.scrollTop, /* 1 */ 
     scrollX = window.pageXOffset || dE.scrollLeft || b.scrollLeft, /* 1 */ 
     top = gbcr.top + scrollY - dE.clientTop, /* 2 */ 
     left = gbcr.left + scrollX - dE.clientLeft; /* 2 */ 

    return { top: top, left: left }; 
} 
  1. getBoundingClientRect()不採取滾動進去,所以你必須彌補這一點。
  2. 可以在<html>上設置邊界,因此不會減小其值,該函數可能會返回相對於文檔的錯誤元素位置。
+0

必須將從頂部/左側滾動的像素數量添加到相應的getBoundingClientRect()屬性。它已經集成到我發佈的函數中,請參閱scrollY/scrollX變量。 – 2013-08-02 15:10:37

+0

非常感謝解決方案。 – kishore