ドラッグ&ドロップを実装してみた | ひぐかつのブログ

ひぐかつのブログ

ブログの説明を入力します。

今回はドラッグ&ドロップを実装したときのメモ。

3年くらい前に、先輩の書いたドロップ&ドロップのコードは見たことあるけど、

もう完全に忘れているし、しかも当時は多分prototype.js使ってたと思うから。。

ということで、今回はjqueryを使ったドラッグ&ドロップです。

使ったライブラリは「jquery-ui-1.8.11.custom.min.js

今はもっと最新のもの出てると思うけど。。

↑のライブラリを使えば、個別に必要なライブラリが全て入っているようです。

使い方:

①ドラッグ(掴ませたい)させるテキストなり、画像なりに、
 <div class="drag">これを掴ませるよー</div>
を設定する。

②ドロップさせたいエリアに、
 <div class="drop">ここにドロップできるよー</div>
を設定する。

③で、javascriptに、
 $(function(){
$('.drag').draggable({});
$('.drop').droppable({accept: '.drag'});
});


超シンプルにやるだけなら上記だけでできちゃいます。
超簡単ですな。

acceptの指定で、受け取るドラッグオブジェクトを指定しているみたいです。

ドロップできない場所にドロップした場合、元の場所にドラッグオブジェクトを戻すには、
draggableの中に、revert: 'invalid'を書いてあげればよし!

で、今回の肝の部分。

「ドロップしたら、ajax通信させてデータを更新したい」

順をおって説明しますと、


<div class="drag">
これを掴ませるよー
<input type="hidden" value="ID" class="hid_id" />
</div>

上記のようにPOSTパラメータをhiddenフィールドで定義する。
※hiddenにclassを設定させているのが肝

②javascriptのdroppableの中に、
$('.drop').droppable({
accept: '.drag',
drop: function(e, ui) {
// hiddenの値を取得
id = $(ui.draggable).children('.hid_id').val();

// ajax通信
$.ajax({url: http://xxx.com,
data: '[param名]=' + id
});
});

を書いてあげる。

ajax通信の書き方はすぐに見つけられるんだけど、
dragオブジェクト内のhidden値を取得するのに非常にはまった。。
IEの開発ツールで、「ui.draggable」の中身を調べてみると、
メソッド、変数の数が半端なかった。。。

但し、上記の$(ui.draggable).children('.hid_id').val();
の書き方がスマートな書き方だとは全く思っていなくて。。
もっと簡単に取得できると思うんだけどなぁ。。

今回はひとまず上記で出来たので良しとします。

突っ込みお待ちしています。

今回参考にしたサイト:
http://www.ericbieller.com/2010/06/24/how-to-create-a-simple-drag-and-drop-with-jquery/
http://ec-cube.systemfriend.co.jp/technique/article0020/