droppable.appendChild
Droppable、かつ、Draggableなコンポーネントの作成。droppable.appendChild時のオブジェクトの整列がキーポイントです。
今日の成果物
前回からの変更点::振分けの各ペインもDraggableにしました。ドロップした付箋は、各ペインの中で整列するようにしました。
付箋を振分けたり、振分けペインを動かしたりしてみてください。
| TODOリスト | 振り分け | |
|---|---|---|
未振分 | ドラッグ→ドロップ | 急ぎ あとまわし やらない |
x:y:
appendChild
ドロップした付箋が、振り分けたペインに「くっつく」ようにします。「くっつく」というのは、DOMの世界で、付箋がペインにappendされる。ということです。
こうすれば、ペインをドラッグしたときに、くっついている付箋もまとめて移動できるようになります(その他の説明は前回を参照してください)。
function appendImpl(dragElement, dropElement, event){
dropElement.appendChild(dragElement);
}
//「急ぎ」ペインは、DraggableかつDroppable
new Draggable('急ぎ', {revert:false} );
Droppables.add('急ぎ',
{ accept:'postits',
onDrop:appendImpl,
hoverclass:'cart-active'
} );
ここで注意しなければならないのは、付箋(ドロップしたコンポーネント)の座標系(snapの戻り値)が、appendした親の座標系に変わってしまうので、onDrop時に、座標系を変換してやる必要があります。
冒頭のアプリでは、ドラッグしている付箋の座標を表示しているので、注目してください。
dragElementの座標を直接操作する方法(プロパティ)は分からなかったので、スタイルシートをいじってみました。
修正したonDropフックは、次のようになります。
function appendImpl(dragElement, dropElement, event){
dropElement.appendChild(dragElement);
dragElement.style.left='10px';
dragElement.style.top='0px';
dragElement.style.margin='2px';
}
あとは、付箋やペインを生成したり、ブラウザ上の動きをサーバ側に保存するようにAjaxすれば、付箋アプリが完成しそうです。

