2010-12-01 7 views
2

J'utilise le document.elementFromPoint pour obtenir l'élément sélectionné pour le faire glisser. Mais il renvoie null. Quand je débogue le même et réexécute le même code, l'objet est retourné.document.elementFromPoint retourne null sur IE

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

Répondre

0

c'est ressembler, nous avons la même idée méchant, haha. Mais je travaille sur la collision d'objets. Regardez, où vous appelez GetZoneFromPoint. Evénement de clic de curseur seulement invoqué dans le navigateur, non? Donc, pas besoin de vérifier x ou y, juste zone = null au début. Vous double vérifier elementFromPoint pour quoi tandis que x & y inchangé? J'ai terminé le flux de travail ici.

quelques astuces: - J'ai 2 objets DIV 'absolus' appelés A & B qui se chevauchent B dans le coin inférieur droit. - Utilisez comme ceci: var X = parseInt (B.offsetLeft); var Y = parseInt (B.offsetTop); alerte (document.elementFromPoint (X, Y) .innerHTML); - Pourquoi analyser? offsetLeft return dans le format: number + "px" - Le résultat est: IE-> return A while FF-> B - Si X-1 ou Y-1, les deux navigateurs renvoient A. - Derniers mots: ne pas utiliser document.body.clientWidth vérifie seule la résolution, essayez ce fichier document.body.clientWidth-o.clientWidth. J'espère que cela vous donnera un bonus de mise sous tension. Acclamation!

Questions connexes