2009-08-19 10 views
2

Googleでホストされている最新のjQuery/UIを使用しています。jQueryドラッグ・ドロップの問題:mousemoveイベントが一部の要素にバインドされていません

<ul id="tree"> 
    <li><a href="1/">One</a></li> 
<li><a href="2/">Two</a></li> 
</ul> 

そして、次のjavascript:私は、次のマークアップ持っている

$(document).ready(function(){ 

    // Droppable callbacks 
function dragOver(overEvent, ui_object) { 
    $(this).mousemove(function(moveEvent){ 
     console.log("moved over", this); 
    }); 
} 

function drop_deactivate() { 
    $(this).unbind(); 
} 

function drag_out() { 
    $(this).unbind(); 
} 

// Actual dragging 
$("#treeContainer li").draggable({ 
    revert: true, 
    revertDuration: 0 
}); 

// Actuall dropping 
$("a").droppable({ 
    tolerance: "pointer", 
    over: dragOver, 
    deactivate: drop_deactivate, 
    out: drag_out 
}); 

を});

最初のliを2番目にドラッグすると、mousemove関数が起動します(そして、firebugは出力をログに記録します)。しかし、最初の2番目のliを上にドラッグすると、mousemove関数は起動しません。このライブはhttp://jsbin.com/ivalaにあります。これには理由がありますか?何か他の方法でmousemoveイベントをトラップする必要がありますか?

編集:mousemove()イベントは、現在ドラッグされている要素(マウスオーバー時にバインドする必要があります)よりも前の要素に対してバインドされていないと考えられます。

+0

私はリンクを開いて、最初の火薬爆弾の上に2番目のliをドラッグして出力を記録します。しかし、それは2番目のものよりも最初のものを引きずることがはるかに容易です。 –

+0

私もそれに気付きました。それは規則的な行動ではない。非常に混乱しています。 – saturdayplace

+0

mousemoveイベントを追加して何を達成しようとしていますか? – PetersenDidIt

答えて

7

ドラッグ可能なヘルパー要素がマウスの移動イベントを食べているようです。カーソルがヘルパーの上にある場合、下のコンテナはmousemoveイベントを受け取りません。

ヘルパーオフセットをカーソルからはずすようにして、カーソルのすぐ下にヘルパー要素がないようにしてください。あなたは、ドラッグ可能なのcursorAtオプションでこれを行うことができます:あなたは、あなたのヘルパーにpointerEventsのCSSスタイルを追加しようとする可能性のいずれか

draggable({ cursorAt: { top: 5, left: 5 } })

+0

私は尋ねてから24ヶ月以上が経過していても、これを答えとしてマークするつもりです。 – saturdayplace

+0

:)ありがとう。私は同様の問題を抱えており、これはおそらくそれを修正し、あなたが気付いていた断続的な動作を説明していると考えました(例えば、マウスがドラッグヘルパーより速く動いて、ヘルパーがマウスに引っかかる前にいくつかのマウス移動イベントが起こる)。 – Max

1

。そうすれば、すべてのイベントがドラッグされた要素を通過します。フルドラッグ可能なもので

clone.css('pointerEvents', 'none'); 

element.draggable({ 
    helper: function() { 
     var clone = element.clone(); 
     clone.css('pointerEvents', 'none'); 
     return clone; 
    } 
}) 
2

これは私が行っている、それがどのような作品です。

$(dragMe).draggable({ 
    start : function(e){ 
      $(this).css({'pointer-events': 'none'}); 
     }, 
    stop: function(e){ 
      $(this).css({'pointer-events': 'all'}); 
     } 
}) 
関連する問題