DD: Using Handles

    dd = new YAHOO.util.DD("dd-demo-1");

インスタンス化された要素は、その枠内のどこでMousedownしてもDragを開始できる。

Handle(YUIのページはこちら)とは、特定の域でMousedownすることにDragの開始を制限する方法である。
Handleには、InnerhandleとOuterhandleの2つがあり、ともにYAHOO.util.DDのメソッドとして定義されている。

名前 意味 DDのメソッド
InnerHandle Dragする要素の子要素で、一緒にDragされる setHandleElId("element_id")
OuterHandle Dragする要素の兄弟要素で、一緒にDragされない setOuterHandleElId("element_id")

サンプルコードは以下。
Handleの形状や色がStyleで書かれていることに注意。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Ajax_Sampling</TITLE>
<style type="text/css"> 
/* Drag and Dropする要素を含むDivのスタイル(初期値)*/
#playground {
    position: relative;
    height: 200px;
}

/* Drag & Dropされる要素に共通のスタイル*/
.dd-demo {
    position:absolute;
    border:4px solid #666;
    text-align:center;
    color:#fff;
    height:60px;
    width:60px;
}

/* デモ1のハンドラのスタイル*/
.dd-demo .dd-multi-handle-1 {
    background: #336699; float: left;
    cursor:move;
}

.dd-demo .dd-multi-handle-2 {
    background: #336699; float: right;
    cursor:move;
}

/* デモ2のハンドラのスタイル*/
.dd-demo .dd-handle {
    background: #003366;
    cursor:move;
}

/* デモ3のハンドラのスタイル*/
.dd-outer-handle {
    position:relative;
    background: red;
    cursor:move;
    height: 20px;
    width: 3em;
    text-align:center;
    top:0px; left:200px;
}

/* 使ってない
.dd-demo-em {
    border:4px solid purple;
}
*/

/* Drag & Dropされる要素に個別のスタイル*/
#dd-demo-1 { 
    background-color:#6D739A;top:0px; left:0px;
}

#dd-demo-2 { 
    background-color:#566F4E;top:50px; left:100px;
}

#dd-demo-3 {
    background-color:#7E5B60;
    top:20px; left:200px;
}

</style>

<!-- 読み込むjs --> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js" >
</script> 
<script type="text/javascript" src="scripts/yui/dragdrop/dragdrop-min.js" >
</script> 

<script type="text/javascript">
var dd, dd2, dd3;
YAHOO.util.Event.onDOMReady(function() {

	//1.ハンドルがDDの内側にある。setHandleElId
	dd = new YAHOO.util.DD("dd-demo-1");
    // ハンドルはDD内にいくつも設定できる。
    dd.setHandleElId("dd-handle-1a");
    dd.setHandleElId("dd-handle-1b");

	//2.ハンドルがDDの内側にある。
    dd2 = new YAHOO.util.DD("dd-demo-2");
    dd2.setHandleElId("dd-handle-2");

	//2.ハンドルがDDの外側にある。setOuterHandleElId
    dd3 = new YAHOO.util.DD("dd-demo-3");
    // ハンドルはdd3の外にいくつもくっつけられる。
    dd3.setOuterHandleElId("dd-handle-3b");
});
</script>
</HEAD>

<BODY>
<!-- Drag and Dropする要素 -->
<div id="playground">
<div id="dd-demo-1" class="dd-demo">
    <div id="dd-handle-1a" class="dd-multi-handle-1">H1</div>
    <div id="dd-handle-1b" class="dd-multi-handle-2">H2</div>
<div>デモ1</div>
</div>
<div id="dd-demo-2" class="dd-demo">
    <div id="dd-handle-2" class="dd-handle">H</div>
デモ2
</div>

<div id="dd-handle-3b" class="dd-outer-handle">Outer</div>
<div id="dd-demo-3" class="dd-demo">デモ3</div>
</div>
</BODY>
</HTML>

サンプルイメージ(移動後)は以下。OuterHandleは楽しい動きをする。