2017-01-12 11 views
0

私はHTML Rocksのドラッグアンドドロップtutorialを使っています。現在のチュートリアルでは、基本的に、ドラッグされた要素とそれがドロップされた要素の切り替えを行います。 A点にあるものはB点に、B点はA点に移動します。HTML5を使用してドラッグ&ドロップで要素をシフトする方法は?

|A|B|C| --> |B|A|C| 
|D|E|F|  |D|E|F| 

このロジックを変更しようとしています。点Eをドラッグすると、他の点の間にあるはずです。

|A|B|C| --> |A|E|B| 
|D|E|F|  |C|D|F| 

これは私が持っているdemoです。

プロパティdropEffectを変更するか、移動するアイテムを追加するために新しいdivを作成する必要がありますか?

function handleDragStart(e) { 
    this.style.opacity = '0.4'; // this/e.target is the source node. 
} 

function handleDragOver(e) { 
    if (e.preventDefault) { 
    e.preventDefault(); // Necessary. Allows us to drop. 
    } 

    e.dataTransfer.dropEffect = 'move'; // See the section on the DataTransfer object. 

    return false; 
} 
+0

ボックスを切り替えるのではなく、スペースを作るためにすべてをシフトしたいのですか? – amflare

+0

基本的に英語で言っているが、最良の方法を見つけることができず、それを変更する – Diego

+0

この機能をお探しの場合は、jQuery Draggable https://jqueryui.com/draggable/#sortableをお勧めします。あなたが学ぶためにこれをやっているのであれば、あなたはオーバーホールなしで望む結果を達成するとは思わない。あなたのロジックは、他の要素が互いに関連している場所を知りません。彼らは、あなたがドラッグしているものとドロップしたものだけを知っています。リストの順序が何であるか、そして何かを移動したらそれを再レンダリングする方法を通知する必要があります。 – amflare

答えて

0

は、私は、このためのjQuery UI libraryを使用してい

を@tbirellと

の代わりに私が最初にやったのすべてのロジックを変更するには、このおかげで行う方法を見つけましたDIVを使用して、私はそれらをULとLIに置き換えます

<ul id="sortable"> 
    <li class=" ui-state-default">Item 1</li> 
    <li class=" ui-state-default">Item 2</li> 
    <li class=" ui-state-default">Item 3</li> 
    <li class=" ui-state-default">Item 4</li> 
    <li class=" ui-state-default">Item 5</li> 
    <li class=" ui-state-default">Item 6</li> 
</ul> 

ライブラリはこれのロジックを管理するものです。

$(function() { 
    $("#sortable").sortable({ 
     revert: true 
    }); 
    $("#draggable").draggable({ 
     connectToSortable: "#sortable", 
     helper: "clone", 
     revert: "invalid" 
    }); 
    $("ul, li").disableSelection(); 
    }); 

demoのリンク。

関連する問題