jqueryでドラッグアンドドロップ

| | コメント(0) | トラックバック(0)
最近忙しい。ので、雑にメモ。

これからはドラッグアンドドロップが流行る。もう流行っているかもしれないけど。
だからドラッグアンドドロップを組んでみたのでそのメモ。

これから初めて組むぞー、という人は、もっと親切な説明サイトがたくさんあるのでそちらを見たほうがいいですよ。
このエントリーが役立つのは僕と、僕と同じ状況に陥ったごくわずかな一部の人です。



 まず、jqueryuiからjsをダウンロードします。
uiとdraggableとdroppableだけでいいです。今回は。

ドラッグ対象にクラスをつけます。今回はhoge。画像です。

<img id="hoge1" class="hoge" src="hoge1.jpg"  width="86" height="108" />

この画像はリスト的にだーっと並んでいて、idがhoge1・・・nと言うようにつけられています。

ドロップするブロックにもクラスをつけます。今回はfuga。
ドロップする場所は、わかりやすくするために枠をとってます。

<div  class="fuga" style="border: 1px solid red; width: 96%; height: 100px; float: left;"></div>

で、ロード時に読み込まれる場所に初期設定を書いておきます。
関数に切り出しているのは、今作っているアプリは、動的にドロップする場所が増減するので、増減させたタイミングで初期化するためです。
function init(){
    j$('.hoge').draggable({helper: 'clone'});
   
    j$('.fuga').droppable({
      accept: '.hoge',
      activeClass: 'active',
      drop:   function(ev, ui) {
        if(!isExist(ev)){
             ui.draggable.clone().appendTo(this);
        }
      }
    });
}

ui.draggable.clone().appendTo(this);というのは、ドロップしたときにドロップした場所にオブジェクトをコピーするって感じで、colne()をとると、コピーじゃなくて移動する感じになります。

コピーということで、同じオブジェクトを同じドロップ場所に何回もコピーできちゃいます。
それが困る状況だったのでisExist()という重複チェックをする関数をかましています。
function isExist(ev){
    $target = ev.target;
    var bool = false;
    j$(".hoge", $target).each(function(){
        if(this.id == ev.originalTarget.id){
            bool = true;
        }
    });
    return bool;
}

これだけで、特定のものを特定の場所に重複なくドロップすることができますスゲー。
自分用なんで、この辺でカンベンしてください。


トラックバック(0)

このブログ記事を参照しているブログ一覧: jqueryでドラッグアンドドロップ

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/276

コメントする


画像の中に見える文字を入力してください。

ブックマーク

はてなブックマークに追加 Yahoo!ブックマークに登録 del.icio.us に登録 ライブドアクリップに追加 Google Bookmarks に追加

Ajax: 2009年5月: 月別アーカイブ

このブログ記事について

このページは、ぴろしが2009年5月 8日 12:44に書いたブログ記事です。

ひとつ前のブログ記事は「Zend Frameworkで現在日付の週始めと週末の日付を取得する」です。

次のブログ記事は「jqueryで$.ajax使ったときにsuccessに処理がきてくれなくてcompleteに行ってしまう」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。