【问题标题】:jQuery UI - Drag and drop sorting and revertjQuery UI - 拖放排序和还原
【发布时间】:2013-12-20 02:35:43
【问题描述】:

请找到我创建的这个 jsfiddle drag n drop no sorting

这里的问题是当我把盒子从拖拽区域放到“放在这里”区域时,盒子不会被整理出来。例如,如果我将 box2 放在“drop here”区域,则 box1 和 box3 之间不应留有空间。当我将 box2 放回可拖动状态时,它是否应该在 box1 和 box3 之间。

我已经尝试在drop可拖动区域的事件中进行梳理。

第二个问题是盒子必须恢复到可拖动区域,只有当它下降到“放在这里”区域之外。但在这里它部分工作。如果我从“放在这里”区域拖动一个框并将其放在外面,它会恢复到“放在这里”区域。我希望它回到可拖动区域。

这是我的代码:

$(function(){

  //$("#eventlist").sortable({connectWith: "#timeline"});
  //$("#timeline").sortable({connectWith: "#eventlist"});

  $(".ui-draggable").draggable({ 
      cursor: "move", cursorAt: { top: -5, left: -5 },
      //snap: " #eventlist", snapMode: "inner"
      revert: "true"      
  });

  $("#eventlist").droppable({
      accept: ".ui-draggable",      
      tolerance: 'fit',
      drop:function(event, ui){
        $("#eventlist").sortable()  ;
      }
  });

  $("#timeline").droppable({
      accept: ".ui-draggable",      
      tolerance: 'fit',      
      drop: function( event, ui ) {
        console.log(':::dropped on timeline:::');        
      },
      out: function( event, ui ) {
        $(".ui-draggable").draggable('option','revert','invalid');        
      }
  });
  });

当它回到可拖动区域时,我如何对框进行排序???以及盒子如何恢复到原来的(初始)位置???

【问题讨论】:

  • 我不久前做了类似的事情。您需要使用sortable 而不是draggable。看看这个小提琴jsfiddle.net/ULmrD/5它不完全是你的情况,但它涉及一个拖到其他拖放区的可排序列表,这些拖放区实际上只是它所连接的其他可排序列表。
  • like this ???它现在仍然有效。
  • 不,一点也不。 1) 你还在使用draggable。 2) 你没有使用sortable。 3)你没有使用过connectWith
  • 我试过sortableconnectWith。我的问题是没有2个列表。 放在这里区域是div
  • 好的。如果您希望放置区域保持排序,我认为您只需将其设为列表而不是 div

标签: javascript jquery jquery-ui


【解决方案1】:

请找到这个解决方案:sorting at one side only

还是有问题。当我放置一个元素时,如果它是空的,我会转到放置区域的开头。我无法将它放在该区域的任何地方。

$(document).ready(function () {
    $('#eventList, #timeLine').sortable({
        connectWith: '.initBox',        
        //Whenever Dropped Item
        receive: function (event, ui) {

       if ($(this).attr('id') != 'timeLine') {            
        $(this).find('div.boxes').sort(sortAlpha).appendTo(this);  
            if ($(this).children().length > 5) {
                if ($(this).attr('id') == 'timeLine') {
                    $(ui.sender).sortable('cancel');
                }
            }
        }
        }
    });

    function sortAlpha(a,b){  
        return a.id.toLowerCase() > b.id.toLowerCase() ? 1 : -1;  
    }

});

如何让它掉落到放置区域的任何地方?????

【讨论】:

    【解决方案2】:

    检查这个http://jsfiddle.net/kB8Lj/57/

    JS

    $(document).ready(function () {
    
    
    $(function() {
    
    $( ".boxes" ).draggable({ revert: true });
    $( "#eventList, #timeLine" ).droppable({
    accept: ".boxes",
    activeClass: "ui-state-hover",
    hoverClass: "ui-state-active",
    drop: function( event, ui ) {
    
    $item=ui.draggable;$item.css({top:0,left:0});
    $(this).append($item);
    
    seen=[]; 
    
    $(this).find('.boxes').each(function(index,item)
    {
    seen.push($(item).attr('id'));
    })
    
    seen.sort();
    
    
    for(var i = 0 ; i < seen.length ; i++)    
    $(this).append($(this).find('#'+seen[i]));
    
    
    
    }
    });
    });
    
    });
    

    【讨论】:

    • 在一侧排序有效,但是当我在放置区域中放置一个框时,它会转到一个区域的开头。我希望它位于用户实际丢弃它的位置。它不应该在放置区域的开头放置。@akbar ali
    • 盒子应该放在灰色区域的任何地方。不在包装中。我希望你能找到一些解决方案。-@akbar ali
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多