JQuery可以滚动排序

时间:2012-07-06 16:02:56

标签: jquery jquery-ui-sortable

使用jQuery可排序,我有一个非常长的列表强制滚动条。每当它足够长时间执行此操作时,每次我抓取一个项目时,页面会自动开始滚动并且LI跳出光标。每当我使用较短的列表时,它都能很好地工作。有什么帮助吗?

当前LI CSS:

min-height: 60px;
margin-top: 12px;
margin-bottom: 10px;
padding: 10px 10px 15px 10px;

background: #FAFAFA;

.roundCorners(3px);
.boxShadow(0,4px,10px,#222);

border: 1px #D4D4D4 solid;

当前的jQuery:

    var makeNotesSortable = function () {
        $("#notes").sortable
        ({
            update: function () {
                console.log($("#notes"));
                updateNoteOrder($("#notes"));
            }
        }).disableSelection();
    }

The LI to move jumps way off the cursor

5 个答案:

答案 0 :(得分:2)

@Kerry Ritter的答案是解决问题的正确方法但不要忘记 通过添加:

修改#sortable元素的CSS
position: relative;

答案 1 :(得分:1)

我找不到这个问题的解决方案,但是我转了滚动并将轴设置为'y'。

        $("#notes").sortable
        ({
            scroll: false,
            sort: function (event, ui) {
                ui.helper.css({ 'top': ui.position.top + $(window).scrollTop() + 'px' });
            },
            helper: 'clone',
            axis: 'y',
            update: function () {
                updateNoteOrder($("#notes"));
            }
        }).disableSelection();

答案 2 :(得分:1)

调试第一次拖动!

jQuery(".sortable").sortable({

    axis: "y", 
    containment: "parent",
    scroll: false,
    handle: ".handle",
    tolerance: "pointer",

    create: function (event, ui) {
        this.first_drag_debug = true;
    },
    sort: function (event, ui) {
       if ( this.first_drag_debug == false ) {
         ui.item.css( 'top', ( ui.position.top + jQuery(window).scrollTop() ) + 'px');
       }
    },
    change:function(event, ui){
        this.first_drag_debug = false;
    },
    stop: function(event, ui){ 
        this.first_drag_debug = false;
    },
    update: function(){ 
        update(); 
    },

});

答案 3 :(得分:1)

您需要使容器本身可滚动,而不是页面主体或任何其他父项,然后将正确计算滚动位置。

答案 4 :(得分:0)

我知道这是一个老问题,但这是我如何通过页面上的多个滚动元素来解决此问题:

$("ul.reorder").sortable({ 
    axis: 'y',
    containment: 'parent',
    tollerance: 'pointer',
    cursor: 'move',
    sort: function(event, ui) {
        var $target = $(event.target);
        if (!/html|body/i.test($target.offsetParent()[0].tagName)) {
            var top = event.pageY - $target.offsetParent().offset().top - (ui.helper.outerHeight(true) / 2);
            ui.helper.css({'top' : top + 'px'});
        }
    }
});