Je travaille sur cette application glisser-déposer avec jquery / javascript, et je dois utiliser une balance des deux pour accomplir ce que je veux.
var drop = document.elementFromPoint($(this).offset().left, $(this).offset().top);
Ce que j’essaie de faire avec ce code ici est d’obtenir l’élément dans lequel mon object glissable tente d’être déposé (survole actuellement). Ceci, cependant, retournera toujours mon object glissable, par opposition à la cellule de table ( td
) située en dessous.
Puisque je sais que je recherche un élément td
, existe-t-il un moyen de définir var drop
comme suit:
var drop = document.elementFromPoint(x, y, 'td')
?
Ou y a-t-il une meilleure façon de s’y prendre?
Étant donné que document.elementFromPoint
renvoie l’élément le plus haut, vous devez définir temporairement votre élément déplaçable à display:none
ou pointer-events:none
pour rechercher les éléments situés en dessous. J’ai créé un résumé ci-dessous qui renvoie la liste de tous les éléments à un moment donné.
essayer
var elementsArray = KoreSampl.atPoint(x,y,yourTableElement);
ou
var elementsArray = KoreSampl.fromEvent(dropEvent, yourTableElement);
puis
for(var i=0; i
En utilisant le résumé ci-dessous: https://gist.github.com/2166393
;(function(){ //test for ie: turn on conditional comments var jscript/*@cc_on=@_jscript_version@*/; var styleProp = (jscript) ? "display" : "pointerEvents"; var KoreSampl = function() {}; KoreSampl.prototype.fromEvent = function(e, lastElement) { e = e || window.event; //IE for window.event return this.atPoint(e.clientX, e.clientY, lastElement); }; KoreSampl.prototype.atPoint = function(clientX, clientY, lastElement) { //support for child iframes var d = (lastElement) ? lastElement.ownerDocument : document; //the last element in the list lastElement = lastElement || d.getElementsByTagName("html")[0]; var element = d.elementFromPoint(clientX, clientY); if(element === lastElement || element.nodeName === "HTML") { return [element]; } else { var style= element.style[styleProp]; element.style[styleProp]="none"; //let us peak at the next layer var result = [element].concat(this.atPoint(clientX,clientY,lastElement)); element.style[styleProp]= style; //restore return result; } }; window["KoreSampl"] = new KoreSampl(); })();
Si vous pouvez vous passer d’anciens navigateurs, le CSS suivant fonctionnera:
Appliquez simplement cette règle à votre élément le plus élevé qui est déplacé.
#dragging { pointer-events: none; }