jQuery UIの提供するsortables機能を使用して、ドラッグによる順序の並べ替えを可能にします。
サンプルではColdFusionのAjax機能も使用していますが、ここではまずsortables機能について紹介します。Ajax機能については「ColdFusion(Ajax機能1)」をご覧ください。
※移動したい行のアイコンをドラッグして、希望の位置に配置します。
「この並びで保存する」ボタンをクリックし、その状態を維持します。
Sortablesを使用するためには、jQuery本体とjQuery UIを最初に読み込む必要があります。
(「1.事前準備」参照)
<!--- jQuery本体 --->
<script src="js/jquery-1.2.6.min.js"
type="text/javascript"></script>
<!--- jQuery UI --->
<script src="js/ui/jquery.ui.all.js"
type="text/javascript"></script>
必要なCSSプロパティを設定します。
(「2.設定されるクラス」参照)
ここでは、並べ替え可能な領域でのカーソルの形状を変更します。
<style type="text/css">
.ui-sortable { /* 並べ替え可能な要素 */
cursor:move; /* カーソルの形状を変更 */
}
</style>
HTMLで適用する要素、フォームなどを設定します。
<!--- 適用する要素 --->
<ul id="sortList">
<li id="1">
<img src="../img/coldfusion/page.png" />
<a href="http://www.digital-moon.com/coldfusion/
sample_image.cfm">ColdFusion (画像認証)</a>
</li>
<li id="2">
<img src="../img/coldfusion/page.png" />
<a href="http://www.digital-moon.com/">
デジタルムーン トップページ</a>
</li>
<li id="3">
<img src="../img/coldfusion/page.png" />
<a href="http://www.sarari.cc/">
簡単ホームページ作成CMS「さらり」</a>
</li>
<li id="4">
<img src="../img/coldfusion/page.png" />
<a href="http://www.t-clip.info/">
宝塚文化振興財団WEB</a>
</li>
</ul>
<!--- フォーム --->
<center>
<form action="" method="post">
<input type="hidden" id="sortId" name="sortId" />
<input type="submit" id="submit" name="submit"
value="この並びで保存する" disabled="disabled" />
</form>
</center>
最後に、JavaScriptでsortableメソッドを呼び出し、並べ替えを可能にします。 (「3.使用方法」参照)
<script type="text/javascript">
$(function() {
//sortableオプション
var option={
// 並べ替え可能な要素
items : 'li',
// ドラッグ可能な要素
handle : 'img',
// 並べ替え終了直後に実行される関数
stop : function(){
// 並べ替えた順番を保存します
var sort_id=[];
$('li','#sortList').attr('id',function(i){
sort_id.push(this.id);
});
$('#sortId').val(sort_id.toString())
},
// 並べ替え終了後に位置が入れ替わっていたら
// 実行される関数
update : function(){
// ボタンを有効にします
$('#submit').removeAttr('disabled');
}
};
//sortable実行
$('#sortList').sortable(option);
});
</script>
| items | 並べ替え可能な要素を指定します(デフォルトは'>*') |
|---|---|
| handle | ドラッグ可能な要素を制限します ※サンプルのように、移動は行単位、ドラッグはアイコンだけという動作ができるので、とても便利です。 |
| start | 並べ替えの開始直後に実行する処理(コールバック関数) |
| stop | 並べ替えの終了直後に実行する処理(コールバック関数) |
| sort | 並べ替えの途中に実行する処理(コールバック関数) |
| change | 並べ替えの途中に項目が入れ替わったときに実行する処理 (コールバック関数) |
| update | 並べ替え終了後に項目が入れ替わっていたら実行する処理 (コールバック関数) |
| connectWith | 移動できる範囲を別の領域に広げることができます (配列で記述、各領域ごとに設定) |
| placeholder | ドラッグ後に移動される位置を表示するCSSクラス名を指定します |
| revert | ドラッグ終了後に位置がずれている時に、目標とする位置まで移動する時間を変更できます(true、又は、1秒を1000とする数値) |
| axis | ドラッグによる移動が可能な方向を制限します ('x'なら横方向のみ、'y'なら縦方向のみ、デフォルトは'x','y') |
| scroll | 親要素をスクロールするかを指定します(デフォルトはtrue) |
| scrollSensitivity | スクロールを開始する端までの距離を数値で指定します (デフォルトは20) |
| scrollSpeed | 何ピクセルスクロールするかを数値で指定します(デフォルトは20) |
| helper | ドラッグ中の表示方法を指定します(関数を指定できます) |
| opacity | helperの不透明度を指定します |
| containment | ドラッグの範囲を指定された範囲内に制限します 'parent'(親要素内)、'document'(Webページ内)、DOM要素、jQueryセレクタを指定 |
| zindex | z-indexを数値で指定します |
| cursor | ドラッグ中におけるカーソルの形状を指定できます (CSSプロパティcursorの値) |
(Hoshino 2008/07/18)