2010-12-01 12 views
2

Ich benutze den document.elementFromPoint, um das ausgewählte Element zum Ziehen zu bekommen. Aber es gibt null zurück. Wenn ich dasselbe debugge und denselben Code dann erneut ausführe, wird Objekt zurückgegeben.document.elementFromPoint liefert null auf IE

Es folgt der Code:

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; 
} 

Antwort

0

es ist aussehen wie wir das gleiche böse Idee haben, haha. Aber ich arbeite an einer Objektkollision. Schauen Sie, wo Sie GetZoneFromPoint aufrufen. Cursorklick-Ereignis wird nur im Browser aufgerufen, richtig? Also, keine Notwendigkeit, x oder y zu überprüfen, nur Zone = null zuerst. Sie überprüfen ElementFromPoint für was während x & y unverändert? Ich habe den Arbeitsfluss hier gemacht.

einige Tipps: - Ich habe 2 'absolute' DIV-Objekte namens A & B, die B ist Überlappung A in der unteren rechten Ecke. - Verwenden Sie so: var X = parseInt (B.offsetLeft); var Y = parseInt (B.offsetTop); Warnung (document.elementFromPoint (X, Y) .innerHTML); - Warum analysieren? offsetLeft return im Format: Zahl + "px" - Das Ergebnis ist: IE-> return A while FF-> B - Wenn X-1 oder Y-1, beide Browser geben A zurück. - Schlusswort: nicht verwenden document.body.clientWidth allein überprüfen Sie die Auflösung, versuchen Sie dieses Dokument.body.clientWidth-o.clientWidth. Hoffe, diese geben Ihnen einen Power-Up-Bonus. Jubeln!

Verwandte Themen