J’ai un JQuery sortable (1.7.1 peut changer si nécessaire) liste comme suit:
- 1
- 2
- 3
- 4
- 5
Le deuxième élément est verrouillé. Par conséquent, si l’élément 5 tente d’être déplacé dans l’emplacement 2, il est inséré dans l’emplacement 3 et s’il est déplacé dans l’emplacement 1, l’élément existant dans l’emplacement 1 passe à 3 et l’élément 5 à 1.
La logique de mise en œuvre est simple, mais ce que j’ai besoin de savoir, c’est s’il existe un moyen programmé de déplacer des éléments qui incluraient les animations.
Est-ce que celui-ci a déjà été déplacé par programme avec jQuery pouvant être sortingé tout en déclenchant des événements, mais vous ne savez pas si l’événement ‘sortupdate’ simule un glisser-déposer ou s’il fonctionne même?
Cela a fonctionné parfaitement.
Suivez les étapes et incluez ceci :
$el.fadeOut(1000, function(){ $el.insertAfter($el.next()); $el.fadeIn(1000); });
Comme ceci (définir l’identifiant de la balise li bien sûr) :
jQuery(".templateMoveUp").on("click", function(){ $el = jQuery("#" + $(this).attr("id") + "_logTemplate"); $el.fadeOut(1000, function(){ $el.insertBefore($el.prev()); $el.fadeIn(1000); }); }); jQuery(".templateMoveDown").on("click", function(){ $el = jQuery("#" + $(this).attr("id") + "_logTemplate"); $el.fadeOut(1000, function(){ $el.insertAfter($el.next()); $el.fadeIn(1000); }); });
Après un rapide coup d’œil sur le code source Sortable de jQuery, il ne semble pas qu’une telle fonctionnalité soit intégrée à ce stade (ce serait un bon ajout à cela, je pense). Quoi qu’il en soit, une solution rapide que j’ai utilisée pour le moment, au cas où quelqu’un aurait le même problème:
$el.fadeOut(1000, function(){ $el.insertAfter($el.next()); $el.fadeIn(1000); });
Cela indique assez clairement qu’un article se déplace d’un endroit à un autre.
Voici le code complet du problème ci-dessus si quelqu’un se pose exactement le même problème.
1- Enregistrez ces 2 événements dans l’init Sortable comme ceci:
start: function(event,ui){$(ui.item).data('initialPos', $(ui.item).offset().top)}, handle: ".drag", stop: lockedRearrange,
2-
var lockedRearrange = function(event, ui){ //block ordering while the current item is rearranged $('.drag', event.target).removeClass('drag').addClass('blockdrag'); var $el = $(ui.item); var directionUp = (ui.absolutePosition.top < $el.data('initialPos')) ? true : false ; _rearrange($el, directionUp, $el.data('initialPos')); }; var _rearrange = function($el, directionUp, initialPos){ if ($el.offset().top == initialPos) { $('.blockdrag', $el.parent()).removeClass('blockdrag').addClass('drag'); return; } var $knockEl = (directionUp) ? $el.next() : $el.prev(); if ($knockEl.hasClass('locked')) { $el.fadeOut(1000, function(){ (directionUp) ? $el.insertAfter($knockEl) : $el.insertBefore($knockEl); $el.fadeIn(1000, function(){ _rearrange($el, directionUp, initialPos); }); }); }else _rearrange($knockEl, directionUp, initialPos); };