jQuery UI - événement 'snap' déplaçable
Je suis à la recherche d'un moyen de liaison de la snap
événement.
Quand je suis en faisant glisser un élément sur ma surface et la déplaçable élément est cassé déclarée composant logiciel enfichable position je veux déclencher un événement.
Quelque chose comme ceci:
$(".drag").draggable({
snap: ".grid",
snaped: function( event, ui ) {}
});
Point Bonus: avec une référence à la .grid
où l' déplaçable élément a été cassé.
source d'informationauteur fguillen | 2012-07-23
Vous devez vous connecter pour publier un commentaire.
La
draggable
widget ne pas exposer un tel événement hors de la boîte (encore). Vous pouvez modifier et maintenir votre version personnalisée ou, mieux, d'en dériver un nouveau widget à partir d'elle et de mettre en œuvre la nouvelle de l'événement. Cependant, il existe une troisième voie.De cette questionnous savons que le widget stocke un tableau de la "potentiellement snappable" des éléments en sa
snapElements
de la propriété. À son tour, chaque élément de ce tableau expose unsnapping
propriété qui esttrue
si le déplaçable helper est actuellement ancré à cet élément etfalse
autrement (l'aide peut aligner plusieurs éléments en même temps).La
snapElements
tableau est mis à jour pour chaquedrag
de l'événement, de sorte qu'il est toujours up-to-date dansdrag
gestionnaires. À partir de là, nous n'avons qu'à obtenir ledraggable
widget instance de l'élément associé avec de données()et appeler sa_trigger()
méthode pour élever nos propressnapped
de l'événement (en faitdragsnapped
sous le capot). En passant, nous pouvons $.étendre() laui
objet avec un objet jQuery emballage ancré élément:Le code ci-dessus, cependant, peut encore être améliorée. Comme il est, un
snapped
événement sera déclenché pour chaquedrag
événement (qui se produit beaucoup) tant que le déplaçable helper reste ancré à un élément. En outre, aucun événement est déclenché lors de l'accrochage des extrémités, ce qui n'est pas très pratique, et freine la convention pour de tels événements se produisent par paires (snapped-in
snapped-out
).Heureusement, la
snapElements
tableau est persistant, de sorte que nous pouvons l'utiliser pour stocker l'état. On peut ajouter unsnappingKnown
propriété pour chaque élément du tableau, afin de s'assurer que nous avons déjà déclenché unesnapped
événement de cet élément. En outre, nous pouvons l'utiliser pour détecter qu'un élément a été cassé depuis le dernier appel et de réagir en conséquence.Note que, plutôt que de l'introduction d'un autre
snapped-out
cas, le code ci-dessous choisit de passer un supplémentairesnapping
de la propriété (à l'image de l'élément de l'état actuel) dans laui
objet (qui est, bien sûr, qu'une question de préférence):Vous pouvez tester cette solution ici.
En clôture, une autre amélioration pourrait être de rendre les
snapped
événement annulablecomme ledrag
événement. Pour y parvenir, nous devons retournerfalse
de notredrag
gestionnaire si l'un des appels à_trigger()
retournefalse
. Vous souhaitez peut-être réfléchir à deux fois avant de mettre en œuvre ce, même si, comme l'annulation d'une opération de glisser sur snap-in ou snap-out ne ressemble pas à un utilisateur très intuitive dans le cas général.Mise à jour: à Partir de l'INTERFACE utilisateur de jQuery 1.9 partir, le
data()
devient le widget du nom complet, avec des points remplacés par des tirets. En conséquence, le code utilisé ci-dessus pour obtenir le widget exemple devient:Au lieu de:
En utilisant le nom non qualifié est toujours pris en charge dans 1,9 mais est obsolète, et le soutien seront déposés en 1.10.
En jquery-ui 1.10.0, le code ci-dessus ne fonctionne pas. La fonction de glissement est plutôt: