2010-12-01 78 views
2

我正在使用document.elementFromPoint獲取所選元素以進行拖動。但它返回null。當我調試相同,然後重新運行相同的代碼,對象返回。document.elementFromPoint在IE上返回null

以下是代碼:

function GetZoneFromPoint(x, y, prtDrag, elemIBeam,evnt) { 
    if (x == null || y == null || prtDrag == null || elemIBeam == null) 
     alert("Null in GetZone"); 
    var prtDragZIndexOld = prtDrag.style.zIndex; 
    var elemIBeamZIndexOld = elemIBeam.style.zIndex; 
    prtDrag.style.zIndex = -1; 
    elemIBeam.style.zIndex = -1; 
    var zone; 
    zone = document.elementFromPoint(x, y); 
    prtDrag.style.zIndex = prtDragZIndexOld; 
    elemIBeam.style.zIndex = elemIBeamZIndexOld; 
    if (zone == null) { 
     zone = document.elementFromPoint(x, y); 
     if (zone == null) { 
      debugger; 
      zone = event.rangeParent; 
     } 
    } 
    if (zone == null) { 
     alert('null'); 
     return null; 
    } 
    if (x < 0 || x > document.body.clientWidth || 
     y < 0 || y > document.body.clientHeight) { 
     zone = null; 
    } 
    else if ((zone.className == 'LayoutWellElement') || 
      (zone.className == 'LayoutMainElement') || 
      (zone.className == 'ElementFrame')) { 
     while ((!FIsZone(zone)) && (zone.tagName != 'BODY')) { 
      zone = zone.parentElement; 
     } 
    } 
    if (!FIsZone(zone)) { 
     zone = null; 
    } 
    return zone; 
} 

回答

0

它看起來像我們有相同的餿主意,哈哈。但我正在研究物體碰撞。看,你在哪裏調用GetZoneFromPoint。光標單擊事件只在瀏覽器中調用,對嗎?所以,不需要檢查x或y,剛開始zone = null。您在x & y保持不變的情況下再次檢查elementFromPoint?我在這裏完成工作流程。

一些提示: - 我有2個'絕對'DIV對象,名爲A & B其中B在右下角重疊A. - 像這樣使用: var X = parseInt(B.offsetLeft); var Y = parseInt(B.offsetTop); alert(document.elementFromPoint(X,Y).innerHTML); - 爲什麼解析? offsetLeft返回的格式爲:number +「px」 - 結果是:IE-> return A while FF-> B - 如果X-1或Y-1,則兩個瀏覽器都返回A. - 最終字詞:不要使用單獨檢查document.body.clientWidth檢查解析,試試這個document.body.clientWidth-o.clientWidth。希望這些給你一個通電獎金。歡呼!

相關問題