JQuery Sortable以编程方式将项目设置为索引

我有一个JQuery可排序(1.7.1可以根据需要更改)列表如下:

  • 1
  • 2
  • 3
  • 4
  • 5

第二个项目被锁定,因此如果尝试在插槽2中移动项目5,则它将在插槽3中移动,如果尝试在插槽1中移动,则插槽1中的现有项目将下降为3,项目5将变为1。

实现逻辑很简单,但我需要知道的是,是否有任何以编程方式移动项目,包括动画。

确实发现这个已经以jQuery可排序方式移动项目,同时仍然触发事件但不确定’sortupdate’事件是否会模拟拖放或者它是否会起作用?

这非常有效。

按照步骤包括

  $el.fadeOut(1000, function(){ $el.insertAfter($el.next()); $el.fadeIn(1000); }); 

像这样 (当然设置li标签的id)

 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); }); }); 

在快速浏览一下jQuery的Sortable源代码之后,似乎并没有内置这样的function(对我来说这将是一个很好的补充)。 无论如何,我现在使用的快速解决方法,以防任何人遇到同样的问题:

  $el.fadeOut(1000, function(){ $el.insertAfter($el.next()); $el.fadeIn(1000); }); 

它有点清楚地表明物品从一个地方移动到另一个地方。

如果有人遇到完全相同的问题,这里是上述问题的完整代码。

1-在Sortable init中注册这两个事件,如下所示:

 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); };