2010-12-01 7 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 &が変更されていない間、elementFromPointを何度チェックしますか?私はここで仕事の流れを終えた。

いくつかのヒント: - 私は2つのA絶対値のDIVオブジェクトA & Bを持っていますが、Bは右下に重なりAです。 - このように使用: var X = parseInt(B.offsetLeft); var Y = parseInt(B.offsetTop); alert(document.elementFromPoint(X、Y).innerHTML); - 解析する理由offsetLeft戻り値はformat:number + "px" - 結果はIE-> Aを返すFF-> B - X-1またはY-1の場合、両方のブラウザがAを返す。 - 最終ワード:使用しないdocument.body.clientWidthだけで解像度を確認してください。このdocument.body.clientWidth-o.clientWidthを試してください。これらがあなたにパワーアップボーナスを与えることを願っています。応援!

関連する問題