5

更新しました

jsフィドル(更新)はこちら

知りたいのですが、ドラッグする要素が列内にあるかどうか。

Left to rightドラッグすると機能しますが、ドラッグすると機能しませんright to left

ここに画像の説明を入力

JS

var isOutside = true;

$('.drag').draggable({
    helper : 'clone',
    drag : function(e, ui){
        if(isOutside)    
           return;
        //here is my code;
    },
});

$('.column').droppable({

    over : function(){
        isOutside = false;
        $('p').text('dragging inside');
    },
    out : function(){
         isOutside = true;
         $('p').text('dragging outside');
    }
});
4

1 に答える 1

3

これが発生する理由は、おそらく、マウスが連続したパスに沿って移動するのではなく、ジャンプするためです。ゆっくりと動かすと、毎回 1 ~ 2 ピクセルジャンプするので、気付かないでしょう。激しく振り回すと、ポーリング間で 100 ピクセル以上ジャンプできます。

マウスが何か他のものの上にあるので、そのイベントが最初にトリガーされ、次にブラウザーのループが追いついたときに out イベントも検出されるのは正常です。over イベントはコールバック (マウスの移動) であり、ポーリング (他に何が転がっているでしょうか?) ではないため、over イベントの「重要性」はより高いと言えます。

これらのイベントの順序に依存して何かを発生させたい場合は、イベントを処理する前に何らかのアクションが実行されていることをoverハンドラーで確認することをお勧めします。基本的にこれを行います:outover

  1. 最初のオーバー イベント (変数が null) で、現在の要素を保存します。
  2. 変数が現在の要素ではない次の over イベントで、古い要素の out イベントを処理し、変数を現在ホバーされている要素に設定します。
  3. out イベントでは、out を処理し、要素を null に設定します。

overこれにより、先行アウトの前に実際のイベントが発生した場合でも、イベントの順序が強制されます。

イベントを使用してout、マウスがすべてのドロップ ゾーンの外にあることを追跡し、そこでリセットすることもできます。イベントを使用しoverて、ドロップ ゾーン内のすべてのドラッグを処理します...

于 2013-03-12T11:41:06.383 に答える