Je travaille avec gwt et gwt-dnd (une bibliothèque géniale pour glisser-déposer).Déterminer l'ordre de chevauchement des éléments
J'ai un dropTarget (un div) qui chevauche un autre, et la bibliothèque choisit celle en dessous pour l'opération de drop. La raison en est que le choix est fait avec les critères suivants:
qui DropController représente Détermine le plus profond descendant DOM cible situé à la baisse emplacement prévu
(x, y)
.
qui est bon pour descendre DropTargets, mais pas une hiérarchie comme ceci:
<body>
<div id="a">
<div id="b">
<div id="c">
<div id="DropTarget_D"></div>
</div>
</div>
</div>
<div id="1" style="position:absolute; z-index: 1; top:0; left:0">
<div id="DropTarget_2"></div>
</div>
</body>
Démo: http://jsfiddle.net/rxwMB/
Comme vous pouvez le voir à partir du code (à la fin du poste), dans ce cas DropTarget_C est utilisé (car c'est le "plus profond") même si DropTarget_2 est affiché.
Comment puis-je dire, étant donné deux composants, lequel est le plus haut?
est ici le code qui font le choix:
private int compareElement(Element myElement, Element otherElement) {
if (myElement == otherElement) {
return 0;
} else if (DOM.isOrHasChild(myElement, otherElement)) {
return -1;
} else if (DOM.isOrHasChild(otherElement, myElement)) {
return 1;
} else {
// check parent ensuring global candidate sorting is correct
Element myParentElement = myElement.getParentElement().cast();
Element otherParentElement = otherElement.getParentElement().cast();
if (myParentElement != null && otherParentElement != null) {
return compareElement(myParentElement, otherParentElement);
}
return 0;
}
}
Le dropTarget est choisi à partir d'une liste ordonnée dont a été ordonnée en utilisant cette fonction. Si la liste ne contient que DropTarget_D et DropTarget_2 et les deux remplissent les conditions, le premier est choisi (même si elle est couverte par DropTarget_2)