複数のリストの境界を越え、ドラッグ&ドロップで並べ替え

jQuery UI の Sortable プラグインの connectWith オプションを使うと、複数のリストの境界を越え、ドラッグ&ドロップで並べ替えることができる。
いづれかのリスト内の項目を、他のリストへすべて移動しても、CSSで一行ほどのスペースを残し、そこへドロップすることができるようにした。

実装例(サンプル)

  • 項目 1-1
  • 項目 1-2
  • 項目 1-3
  • 項目 1-4
  • 項目 1-5
  • 項目 1-6
  • 項目 1-7
  • 項目 2-1
  • 項目 2-2
  • 項目 2-3
  • 項目 2-4
  • 項目 2-5
  • 項目 2-6
  • 項目 2-7
  • 項目 3-1
  • 項目 3-2
  • 項目 3-3
  • 項目 3-4
  • 項目 3-5
  • 項目 3-6
  • 項目 3-7

実装例の動作について

左のリストの「項目 1-1」をドラッグして、中央のリストの「項目 2-2」の上に持ってくると、「項目 2-2」が下へ移動し、「項目 2-1」と「項目 2-2」の間にスペースができる。そのスペースへドロップすると、中央のリストは「項目 2-1」「項目 1-1」「項目 2-2」「項目 2-3」…の順番になる。左のリストは、「項目 1-1」が中央のリストへ移動したので、「項目 1-2」「項目 1-3」「項目 1-4」…の順番になる。
同様に、全ての項目が、左、中央、右のリスト内の任意の位置へ移動できる。
いづれかのリスト内の項目を、他のリストへ、すべて移動した場合も、一行ほどのスペースが残るので、そこへドロップすることができる。

実装例のソースコード

読み込み

読み込み方は、2種類ある。パスは、それぞれ、アップロードした場所を指定する。

まとめて読み込む場合
<link rel="stylesheet" href="themes/base/jquery.ui.all.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
個別に読み込む場合
<link rel="stylesheet" href="themes/base/jquery.ui.all.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="ui/jquery.ui.sortable.js"></script>

JavaScript

<script>
<!--
$( function() {
    $( '.jquery-ui-sortable' ) . sortable( {
        connectWith: '.jquery-ui-sortable'
    } );
    $( '.jquery-ui-sortable' ) . disableSelection();
} );
// -->
</script>

CSS

<style>
<!--
ul.jquery-ui-sortable {
    list-style-type: none;
    margin: 0 2px;
    padding: 2px;
    width: 25%;
    float: left;
    min-height: 1.5em;
    background-color: beige;
    border: solid 1px #606060;
}
ul.jquery-ui-sortable li {
    margin: 3px;
    padding: 0.3em;
    padding-left: 1em;
    font-size: 15px;
    font-weight: bold;
    cursor: move;
}
li.border-color-red {
    border-color: red;
}
li.border-color-blue {
    border-color: blue;
}
li.border-color-green {
    border-color: green;
}
-->
</style>

HTML

<ul class="jquery-ui-sortable">
    <li class="ui-state-default border-color-red">項目 1-1</li>
    <li class="ui-state-default border-color-red">項目 1-2</li>
    <li class="ui-state-default border-color-red">項目 1-3</li>
    <li class="ui-state-default border-color-red">項目 1-4</li>
    <li class="ui-state-default border-color-red">項目 1-5</li>
    <li class="ui-state-default border-color-red">項目 1-6</li>
    <li class="ui-state-default border-color-red">項目 1-7</li>
</ul>
<ul class="jquery-ui-sortable">
    <li class="ui-state-default border-color-blue">項目 2-1</li>
    <li class="ui-state-default border-color-blue">項目 2-2</li>
    <li class="ui-state-default border-color-blue">項目 2-3</li>
    <li class="ui-state-default border-color-blue">項目 2-4</li>
    <li class="ui-state-default border-color-blue">項目 2-5</li>
    <li class="ui-state-default border-color-blue">項目 2-6</li>
    <li class="ui-state-default border-color-blue">項目 2-7</li>
</ul>
<ul class="jquery-ui-sortable">
    <li class="ui-state-default border-color-green">項目 3-1</li>
    <li class="ui-state-default border-color-green">項目 3-2</li>
    <li class="ui-state-default border-color-green">項目 3-3</li>
    <li class="ui-state-default border-color-green">項目 3-4</li>
    <li class="ui-state-default border-color-green">項目 3-5</li>
    <li class="ui-state-default border-color-green">項目 3-6</li>
    <li class="ui-state-default border-color-green">項目 3-7</li>
</ul>
<div style="clear: both;"></div>

スポンサード リンク

カテゴリー: GUI, JavaScript, jQuery, jQuery UI, Sortable パーマリンク