jQuery Glisser-Déposer à l'Aide d'Événements en Direct
J'ai une application avec une longue liste qui change fréquemment, et j'ai besoin d'éléments de la liste à être déplaçable.
J'ai été en utilisant l'INTERFACE utilisateur de jQuery déplaçable plugin, mais il est lent à ajouter à plus de 400 éléments de la liste, et doit être ajouté à chaque fois de nouveaux éléments de la liste sont ajoutés.
Personne ne sait d'un plugin similaire à la jQuery UI déplaçable plugin qui utilise jQuery 1.3 du .live()
événements? Cela permettrait de résoudre ces deux problèmes.
- Ce n'
if (!jQuery(this).data("init")) { jQuery(this).data("init", true);}
faire?
Vous devez vous connecter pour publier un commentaire.
Wojtek la solution a fonctionné parfaitement pour moi. Je me suis retrouvé en le modifiant un peu pour le faire prolonger jQuery...
Maintenant, au lieu de l'appeler comme:
...il suffit d'utiliser:
this.on('mouseover', selector, ...)
au lieu dethis.live('mouseover', ...)
Ceci est un exemple de code qui a parfaitement fonctionné pour moi
gadgets-column
le code à exécuter. Le code est$(this).draggable();
et ce n'est pas quelque chose que vous souhaitez exécuter à chaque fois que vous passez.Vous pourriez faire wrapper fonction comme ceci:
(J'utilise prototype avec jQuery - c'est pourquoi j'ai placé jQuery() au lieu de $())
Et maintenant, au lieu de $(selector).draggable({opte}) utilisation liveDraggable(sélecteur {opte})
Stldoug du code a fonctionné pour moi, mais il n'y a pas besoin de garder le contrôle de l'élément .de données("init") sur chaque événement mouseover. Aussi, il est préférable d'utiliser des "mousemove", comme "mouseover" ne permet pas toujours de se déclencher si votre souris est déjà plus de l'élément lors de l' .en direct de la fonction coups de pied dans.
Voici comment l'utiliser:
L'astuce consiste à ajouter ":not(.ui-déplaçable)" à votre sélection. Depuis jQuery va ajouter automatiquement le "ui-déplaçable" classe à votre élément lorsqu'il devient déplaçable, l' .en direct de la fonction ne sera plus la cible. En d'autres mots, il ne déclenche une fois, à la différence de l'autre solution qui déclenche encore et que vous vous déplacez trucs autour.
Idéalement, vous avez juste à .séparer la "mousemove", mais qui ne fonctionne pas avec .vivre, malheureusement.
Combinant les meilleures réponses de @john et @jasimmk:
À l'aide de
.live
:.live
est obsolète, mieux utiliser.on
:Comme @john expliqué,
.ui-draggable
est automatiquement ajouté à déplaçable méthodes, par l'exclusion de la classe avec le sélecteur, vous vous assurez que draggable() est appelé une seule fois sur chaque élément. Et à l'aide de.on
permettra de réduire la portée de la sélection, l'amélioration de la performance.Un exemple:
Turc:
Anglais:
Remarque: Vous pouvez utiliser
on()
au lieu delive()
oudelegate
. Leon()
a de bonnes performances que les autresJSFiddle
Une vieille question. Mais threedubmedia a glisser et déposer le plugin à vivre, comme de v 1.7 connu simplement comme "sur") de soutien.
http://threedubmedia.com/code/event/drop
Ne l'ai pas utilisé beaucoup donc je ne peux pas rendre compte de la performance, etc. mais semble raisonnable.
Une autre option consiste à mélanger le mouseover gestionnaire avec un amovible classe, comme suit:
C'est assez simple, et résout certains des problèmes que d'autres réponses ont avec re-liaison plus et plus comme vous le passage de la souris.
Un version mise à jour qui n'utilise pas de vivre car c'est déconseillé: