4

我将 Dragula JS 用于拖放功能,我还希望可以选择通过鼠标单击来回移动列表中的元素,而不会丢失拖放功能。我该如何实现这一点?

所以我点击元素 1,它移动到列表中。我从该列表中单击它并返回。这就是想法。

如果有帮助,我准备了一个基本的拖放操作。 http://jsfiddle.net/vf6dnwxj/10/

我在上面小提琴中的结构:

<div class="wrapper panel panel-body">
<ul id="left1" class="cont-dragula">

</ul>
<ul id="right1" class="cont-dragula">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3.</li>
    <li>Item 4.</li>
    <li>Item 5.</li>
    <li>Item 6.</li>
</ul>
</div>

JS:

dragula([left1, right1]);
4

1 回答 1

4

好吧,dragula 没有做任何特别的事情,它只是移动物品。所以你可以简单地在你自己周围移动它们:

var leftList = document.querySelector('#left1');
var rightList = document.querySelector('#right1');
var list = document.querySelectorAll('#right1 li, #left1 li');
for (var i = 0; i < list.length; i++) {
  list[i].addEventListener('click', function(){
        if (this.parentNode.id == 'right1') {
        leftList.appendChild(this);
      } else {
        rightList.appendChild(this);
      }
  });
}

演示小提琴

drake.start(this)如果您希望在操作 DOM 添加之前和操作之后触发 Dragulas 回调drake.end()

drake = dragula([left1, right1]);
drake.on('drop', function(el, target, source, sibling){
console.log(el);
console.log(target);
console.log(source);
console.log(sibling);
});
var leftList = document.querySelector('#left1');
var rightList = document.querySelector('#right1');
var list = document.querySelectorAll('#right1 li, #left1 li');
for (var i = 0; i < list.length; i++) {
  list[i].addEventListener('click', function(){
            drake.start(this);
        if (this.parentNode.id == 'right1') {
        leftList.appendChild(this);
      } else {
        rightList.appendChild(this);
      }
      drake.end();
  });
}
于 2016-02-27T21:16:45.143 回答