jQuery Sortable在拖动时获取光标坐标

时间:2012-04-08 16:11:53

标签: jquery jquery-ui-sortable

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

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

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

上面的代码应该会让你知道我想要实现的目标。也许我想要实现的内容会与内置的可排序滚动功能冲突?

编辑:我认为cursorAt是错误的选择。我需要一个'move'选项来添加一个函数。或类似的东西......

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

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

1 个答案:

答案 0 :(得分:1)

要回答我自己的问题,我就是这样做的。

在可滚动div上创建了一个与可排序函数

分开的mousemove事件侦听器

在我使用的可排序函数start:和stop:切换全局变量的真或假

然后,只要鼠标在可滚动div内移动,它就会检查拖动是否为true,从而触发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滚动之后,我无法将该项目放入其他列表中。无论如何,我会把它作为一个单独的问题来检查。