0

ドラッグされた要素がドラッグ可能な要素と交差する場合、ドラッグされたアイテムは古い位置に戻ります。それについて何か考えはありますか?

                $( "#MainContents div[name=draggable]" ).each(function() {
$( this ).draggable({containment: 'parent',
  scrollSpeed: 1000,
  cursor: "crosshair",
   scroll:true,
 disabled: DragDropState,
stop: function(event, ui) {
        var Stoppos = $(this).position();
        var parentPosition=$(this).parent().position();
        var CalculatedTop=Stoppos.top-parentPosition.top;
        var CalculatedLeft=Stoppos.left-parentPosition.left;
        }
    });
});
4

1 に答える 1

1

ドラッグの開始時にどこから来たのかを記録し、ドラッグの停止時にオーバーレイを確認する必要があります。このjsfiddleの例をチェックしてください

簡単に言えば、ドラッグ可能なオプション配列を拡張して start を含め、データ オブジェクトに上/左の位置を記録してから、停止時に DOM 内の他のドラッグ可能なアイテムをチェックし、一致するものがある場合は元に戻す関数を呼び出します。

元:

$( this ).draggable({
start: function() {
  var div = $(this);
        div.data('top', div.css('top'));
        div.data('left', div.css('left'));
},
containment: 'parent',
  scrollSpeed: 1000,
  cursor: "crosshair",
   scroll:true,
 disabled: DragDropState,
stop: function(event, ui) {
        var draggables = $('.ui-draggable');
        var div = $(this);
        var goHome = function () {
            div.css('left', div.data('left'));
            div.css('top', div.data('top'));
        };

        draggables.not(div).each(function () {
            var curr = $(this);
            var currPos = curr.position();
            var divPos = div.position();
            if (divPos.left >= currPos.left && divPos.left <= (currPos.left + curr.width())) {
                if (divPos.top >= currPos.top && divPos.top <= (currPos.top + curr.height())) {
                    goHome();
                }
            }
        });
    };
});

このようなことがあなたがやろうとしていることだと確信しています。ところで、ここから元に戻す機能をアニメーション化して、最後にあった場所に優雅に戻ることができます。

于 2013-07-30T12:01:59.743 に答える