1

使用 jQuery Sortable 拖动时是否可以获取光标坐标?

我有一个具有精确间隔滚动的可滚动 div。当用户拖动靠近滚动 div 底部的元素时,我想向下滚动 80 像素,或者如果靠近顶部则向上滚动。

$(allIds).sortable({
    connectWith: ".allLists",
    zIndex: 2,
    cursorAt: function(e) {
        if(e.top < 80) {
            myScrollFunction('up');
        }
        if(e.top > 500) {
            myScrollFunction('down');
        }
    }
}).disableSelection();

上面的代码应该有希望让您了解我想要实现的目标。也许我想要实现的目标会与内置的可排序滚动功能冲突?

编辑:我认为 cursorAt 是错误的选择。我需要一个“移动”选项来添加一个功能。或者类似的东西......

$(allIds).sortable({
    connectWith: ".allLists",
    zIndex: 2
}, function(e) {
    if(e.position().top < 80) {
        myScrollFunction('up');
    }
    if(e.position().top > 500) {
        myScrollFunction('down');
    }
}).disableSelection();

但是,如果这有效,它可能只会在可排序事件完成后触发,这是无用的。

4

1 回答 1

1

为了回答我自己的问题,我就是这样做的..

在可滚动的 div 上创建了一个 mousemove 事件侦听器,与可排序函数分开

在 sortable 函数中,我使用 start: 和 stop: 来切换全局变量的真或假

然后,每当鼠标在可滚动的 div 内移动时,它都会检查拖动是否为真,这会触发 myScrollFunction()。

var dragging = false;

var dragScroll = function() {
    $("#scrollableDiv").mousemove(function(e) {
        if(dragging) {
            if((e.pageY-$(this).offset().top)<80) {
                myScrollFunction('up');
            }
            if((e.pageY-$(this).offset().top)>500) {
                myScrollFunction('down');
            }
        }
    });
};

$(allIds).sortable({
    start: function() { dragging = true; },
    stop: function() { dragging = false; },
    connectWith: ".allLists",
    zIndex: 2
}).disableSelection();

但是,这解决了我的问题,现在在 div 滚动之后,我无法将该项目放在其他出现的列表中。无论如何,我将把它作为一个单独的问题进行检查。

于 2012-04-09T05:47:04.043 回答