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イベントリスナーを作成しました

ソート可能な関数で、start:とstop:を使用して、グローバル変数のtrueまたはfalseを切り替えました。

次に、マウスがスクロール可能な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がスクロールした後、表示される他のリストにアイテムをドロップできなくなりました。とにかく、別の問題としてそれをチェックします。

于 2012-04-09T05:47:04.043 に答える