2013-04-29 5 views
5

小さなドロップターゲットでドロップできるようにするために、画面に表示される大きな要素があります。したがって、ドロップターゲットのサイズに合わせてドラッグ可能なクローンのサイズを小さくしたいです。私はこれをアニメ化するのがいいと思った。ドラッグ中にカーソルの周りに小さなクローンを中心に置くようには思えません。何か案は?ここに私が試したものです: http://jsfiddle.net/a3Cj2/小さなクローンでJQuery Draggableを作成するにはどうすればよいですか?

$(".draggable").draggable({ 
    helper: 'clone', 
    start : function(event, ui){ 
     ui.helper.animate({ 
      width: 80, 
      height: 50 
     }); 
    }, 
    drag : function(event, ui){ 
     ui.helper.offset({ 
      left: event.pageX, 
      top: event.pageY 
     }); 
    } 
}); 

$("#target").droppable({ 
    drop : function(event, ui) { 
     console.log('dropped');  
    } 
}); 

答えて

8

最も簡単なアプローチは、縮んだヘルパーの半分の寸法に 'left'と 'top'を設定して、cursorAtオプションを使用することです。

$(".draggable").draggable({ 
    helper: 'clone', 
    start: function (e, ui) { 
     ui.helper.animate({ 
      width: 80, 
      height: 50 
     }); 
    }, 
    cursorAt: {left:40, top:25} 
}); 

Updated fiddle

+0

これははるかに簡単で、トリックを行います。しかし、動きを中心に動かすのと全く同じ効果はありません。 –

+0

@MikeMarcacci、そうですが、ここでの収縮効果は答えよりも魅力的ではありませんが、結果は同じです。私の場合、このアプローチの大きな利点は、ヘルパーが後でいくつかの状況で問題になる可能性のあるマージンで終わらないということです。 –

+0

はい、私はそれに同意します。オブジェクトが一度削除されたら、マージンを使用することは問題ありませんが、それ以降は何時でも言いたいことがあれば、あなたのソリューションははるかに良いアイデアです。 –

2

うわー、思ったよりも多くの仕事を取っています!

$(".draggable").draggable({ 
    helper: 'clone', 
    start : function(event, ui){ 
     ui.helper.animate({ 
      width: 80, 
      height: 50, 
      marginLeft: (300-80)/2 - (300/2 - event.offsetX), 
      marginTop: (200-50)/2 - (200/2 - event.offsetY) 
     }); 
    }, 
    drag : function(event, ui){ 

    } 
}); 

$("#target").droppable({ 
    drop : function(event, ui) { 
     console.log('dropped');  
    } 
}); 

イベントの位置を考慮して、両方のサイズのドラッグの中心の違いに合わせて調整する必要があります。

See fiddle here

+0

あなたは何が起こっているか見ることができたので、私はそこに幅と高さを保ったことにも注意が、 '(300から80)/ 2 - (2分の300 - event.offsetX ) 'は本当に' event.offsetX-40'に単純化することができます –

関連する問題