如何使用dragula js动态拖放

时间:2015-12-01 09:11:37

标签: php jquery ajax drag-and-drop dragula

我正在尝试使用这样的dragula js创建一个部分:

http://bevacqua.github.io/dragula/

我想要的是,拖放应该是动态的。因此,在每次拖放时,应保存每个元素的位置。我怎样才能做到这一点?

我知道可以用php和ajax完成。但不知道如何操纵位置

2 个答案:

答案 0 :(得分:3)

这个问题可以分解为两个不同的问题。

  1. 如何跟踪元素的顺序?
  2. 据我所知,dragula没有跟踪元素定位的概念。您将不得不设计一种方法来标识父容器和draggable items元素。 (例子中的div)。如果需要动态创建父容器,则还需要跟踪它们的顺序。如果您有预定义的布局,那么您需要做的就是跟踪元素顺序以及它们所属的父级。 (例如,如果我们使用dragula示例,则向左或向右)。

    为每个可拖动元素创建一个id。你会有类似的东西。

    <div id="left">
       <div id="element1">Some text</div>
       <div id="element2">Some other text</div>
    </div>
    

    当一个元素被删除时,你需要捕获被删除的元素并将它命令到父容器。为此,您可以使用jQuery索引函数来查找相对于父容器的新索引。然后,您需要重新排序列表,因为它已保存在服务器端。

    draggableElements.on('drop',function(el)
    {
       var parentElId = $(el).parent().attr('id');
       var droppedElIndex = $(el).index();
       var droppedElId = $(el).attr('id');
       $.ajax({
           url: "itemDropped.php",
           type: 'GET',
           data: { parentIdParam: parentElId, 
                   droppedIndexParam: droppedElIndex,
                   droppedIdParam: droppedElId   }
       }).done(function() {
          //do something else
       });
    });
    
    1. 如何保存元素的排序?
    2. 这取决于您的要求。如果要将heirarchy保存到数据库,则需要保存每个元素的父容器ID,它所在的顺序或位置以及元素ID。

      要按照相同的顺序重新呈现页面,您只需将每个容器中的所有元素循环,然后按照保存的顺序进行渲染。

答案 1 :(得分:0)

查看此[http://codepen.io/rachelslurs/pen/EjKmLG]

其他example与你的例子大多相似 示例code用于检查和自定义