在快速瀏覽jQuery的Sortable源代碼之後,似乎並沒有在這一點上構建這樣的功能(對我來說這是一個很好的補充)。總之,我萬一有人使用,現在一個快速的解決辦法有過同樣的問題:
$el.fadeOut(1000, function(){
$el.insertAfter($el.next());
$el.fadeIn(1000);
});
它有點清楚地表明,從一個地方移動到另一個項目。
下面是上述問題的完整代碼,如果有人遇到完全相同的問題。
1-註冊這兩個事件在可排序的初始化,像這樣:
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);
};