トップページ >  Ajax >  ドラッグアンドドロップ
初版2009/08/11: 最終更新日2009/08/11
ドラッグアンドドロップ
目次
ドラッグアンドドロップの原理
移動処理
マウスボタンを放す処理
ドラッグアンドドロップの原理
ドラッグアンドドロップを可能にするプログラムの作成を行います。
はじめに、ドラッグアンドドロップさせる要素をHTMLで作成します。
ここでは、32pxの赤い正方形を使います。

<div id="block" style="background-color: red; width: 32px; height: 32px;"></div>

ここで、ドラッグアンドドロップとはどういう機能かを考えます。
  • マウスボタンを押すと移動可能な状態になる
  • 移動可能な状態でマウスを動かすと、要素も一緒に移動する
  • マウスボタンを放すと、移動可能状態が終了する
では、マウスボタンを押すと移動可能な状態になる処理から作っていきます。
ある要素の上でマウスボタンが押されたとき、というイベントはmousedownです。
また、マウスが移動したときというイベントはmousemoveです。 mousemoveは要素上以外の場所でも起こる可能性があるので、$(window).mousemove(~~)とし、windowのイベントとします。
下のコードでは、mousedownが起こると、windowのmousemoveに移動処理を登録しています。
    $("#block").mousedown(function(){
        $(window).mousemove(function(){
            // 移動処理
        });
    });
移動処理
次に、移動処理の実際の内容について説明していきます。
まず、mousemoveに与えている関数が、function(e){}と引数eを受け取っていることに注意してください。
この変数eはマウスポインタの座標などの情報を保持しています。 e.pageX, e.pageYにそれぞれ左端からの距離、上端からの距離が入っています。
blockのstyle属性を操作して、left, topをそれぞれe.pageX, e.pageYに設定することにより移動させています。
また、これはCSSの性質上座標を指定して配置するためには、position: absoluteとする必要があるため、そのように設定しています。
$("#block").mousedown(function(){
    $(window.document).mousemove(function(e){
        $("#block").css({
            position: "absolute",
            top: e.pageY,
            left: e.pageX
        });
    });
});



「サンプル実行」を押すと、「赤い要素上でマウスボタンを押すと要素が移動可能な状態になる」「移動可能な状態でマウスを動かすと、要素も一緒に移動する」ということができました。
最後にマウスボタンを放すと移動可能状態を終了させる処理を追加します。
マウスボタンを放す処理
先述のコードにドラッグアンドドロップのドロップのドロップ部分の処理をつけます。
マウスボタンを離すと移動が終了するようにします。
$("#block2").mousedown(function(){
    $(window.document).mousemove(function(e){
        $("#block2").css({
            position: "absolute",
            top: e.pageY,
            left: e.pageX
        });
    });
});

$(window.document).mouseup(function(){
    $(window.document).unbind("mousemove");
});


 

Information
リンクについて
個人情報保護方針
Yahoo!ブックマークに登録

社長ブログ
やる気はあるがお金がない㈱コンフレッジブログ

広告
株式会社グローハウジング


サイト内検索
当サイト内を検索できます↓


PV