change switch position behavior

狂风中的少年 提交于 2019-12-12 10:07:36

问题


How to change switch behavior in sortable? I mean by default there 1 - 2 - 3 - 4 http://jsfiddle.net/keGuN/ when I switch positions of 4 and 1 - they transform into 4 - 1 - 2 - 3. I want only switch positions of 4 and 1(4 - 2 - 3 - 1). How to do it?


回答1:


I think I understand what you are trying to do. jQuery's Sortable isn't really designed to do what you are asking. However, playing with the events that Sortable exposes, you can swap positions of the dragged item (A) with the item that was previously in the spot (B) where A was dropped. I think this achieves the effect you want:

jsFiddle demo

jQuery:

$(function() {
    var oldIndex;

    $("#sortable").sortable({
        start: function(event, ui) {
            oldIndex = ui.item.index();
        },
        stop: function(event, ui) {
            var newIndex = ui.item.index();
            var movingForward = newIndex > oldIndex;            
            var nextIndex = newIndex + (movingForward ? -1 : 1);

            var items = $('#sortable > div');

            // Find the element to move
            var itemToMove = items.get(nextIndex);
            if (itemToMove) {

                // Find the element at the index where we want to move the itemToMove
                var newLocation = $(items.get(oldIndex));

                // Decide if it goes before or after
                if (movingForward) {
                    $(itemToMove).insertBefore(newLocation);
                } else {
                    $(itemToMove).insertAfter(newLocation);
                }
            }
        }
    });

    $("#sortable").disableSelection();
});

The only noticeable issue is that the positions are not update on drag, but only after the item is dropped in its new location.




回答2:


You can achieve swapping with draggable/droppable

$(function() {
$(".swapable").
draggable({ revert: true }).
droppable({
    drop:function(event,ui){
        swapNodes($(this).get(0),$(ui.draggable).get(0));
    }});
});

https://stackoverflow.com/a/698440/2033671

function swapNodes(a, b) {
    var aparent= a.parentNode;
    var asibling= a.nextSibling===b? a : a.nextSibling;
    b.parentNode.insertBefore(a, b);
    aparent.insertBefore(b, asibling);
}

http://jsfiddle.net/keGuN/1/



来源:https://stackoverflow.com/questions/18747622/change-switch-position-behavior

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!