2011-01-01 7 views
2

jQuery UIのドラッグアンドドロップに問題があります。私は4つの領域のうちの1つで画面に配置される新しい要素を動的に作成します。これらの要素はドラッグ可能で、スクリーン全体に配置できます。しかし、私は、これらの要素が3つの領域のいずれかにしかドロップされないようにしたい。jQuery UIの特殊領域のみの要素の削除

私はここで完全な作業例を作成しました:http://jsbin.com/enusu4/

赤いボーダー内領域内のテキストをクリックすると、新しい要素が作成され、緑豊かなエリアdrop1に配置されます。この要素は緑色の領域(drop1,drop2またはdrop3)のいずれかにのみドロップ可能になりました。これどうやってするの?

最高のお付き合い

答えて

3

私はそれはあなたがやりたいことができ、いくつかの修正を加えて、同様の質問hereに答えました:
Javascriptを:

$(function() { 
    $('.drag').draggable({ 
     revert: "invalid", 
     scope: "items" 
    }); 
    $('#droppable').droppable({ 
     scope: "items", 
     // if you want to disable the dragging after drop un-comment this 
/* 
     drop: function(e, ui) { 
      $(ui.draggable).draggable({"disabled":true}); 
     } 
     */ 
    }); 
    $('#droppable2').droppable(); 
    $(':button').click(function() { 
     var $box = $('<div class="drag">Drag me</div>'); 
     $('#cont').append($box); 
     $box.draggable({ 
      revert: "invalid", 
      scope: "items" 
     }); 
    }); 
}); 

HTML:

<div><button type="button">Add box</button></div> 
<div id="droppable">Drop here</div> 
<div id="droppable2">Out of scope!</div> 
<div class="clear"></div> 
<div id="cont"> 
    <div id="draggable" class="drag">Drag me</div> 
    <div id="draggable2" class="drag">Drag me</div> 
</div> 

Example Link

EDIT: さて、ここに更新があります:
Javascriptを:

$(function() { 
    var dragOptions = { 
     revert: "invalid", 
     scope: "items", 
     helper: "clone" 
    } 
    $('.drag').draggable(dragOptions); 
    $('.droppable').droppable({ 
     scope: "items", 
     drop: function(e, ui) { 
      var $drop = $(this); 
      $(ui.draggable).draggable({ 
       "disabled": true 
      }).appendTo($drop); 
     } 

    }); 
    $('#droppable2').droppable(); 

    $(':button').click(function() { 
     var $box = $('<div class="drag">Drag me</div>'); 
     $('#cont').append($box); 
     $box.draggable(dragOptions); 
    }); 
}); 

HTML:

<div><button type="button">Add box</button></div> 
<div style="float: left;"><h3>Drop here:</h3> 
    <div class="drop1 droppable"></div> 
</div> 
<div style="float: left;"><h3>Drop here:</h3> 
    <div class="drop2 droppable"></div> 
</div> 
<div style="float: left;"><h3>Out of scope!</h3> 
    <div id="droppable2"></div> 
</div> 
<div class="clear"></div> 
<div id="cont"> 
    <div class="drag">Drag me</div> 
    <div class="drag">Drag me</div> 
</div> 

Example Link 2

+0

どうもありがとうございました。しかし、私はドロップ領域に相対的な座標を保存する必要があるので、赤の要素の左上隅が内側にある必要があります。したがって、要素をドロップ領域にドラッグすると、左上隅が0px/0pxになります。デモでは、ドロップエリアの外に少しドラッグすると要素もドロップされます。私はあなたが私の言いたいことを理解してくれることを願っています...もっと良い:私はスクリーンショットを作った:http://img716.imageshack.us/img716/3473/droppedi.png要素がドロップされているが、左上隅が外側黄色の領域のため、私は負の座標を持っています。 – Tim

+0

さて、私は私の答えを更新しました。これは良いアプローチだと思います。 BTWはjQueryUI Droppableからインスピレーションを受けました。[例](http://jqueryui.com/demos/droppable/#photo-manager) – ifaour

+0

ああ、申し訳ありませんが、要素はどの位置に置いても、ホワイトボードのようなものでなければならず、柔軟でなければなりませんこの方法では。 – Tim

0
$("#dropable").droppable({ 
    hoverClass: "ui-state-hover", 
    drop: function (event, ui) { 
     if ($('.ui-state-hover').size() > 0){return false;} 
     //TODO 
    } 
} 
+0

これは、説明を含む質問を解決するかもしれないが、opを助けるだろう。 – deW1

関連する問題