2015-02-07 52 views
3

感觉就像问题是已经回答:jQueryUI:如何将可放置区域限制为多个div?

我有3个时间表和一些可拖动的元素放在那里。出于某种原因,我无法让它工作。这是我使用的语法:containment: ".timeline1, .timeline2, .timeline3"

enter image description here

$(function() { 
 
    $(".timeline1, .timeline2, .timeline3").droppable(); 
 

 
    $(".event").draggable({ 
 
    containment: ".timeline1, .timeline2, .timeline3" 
 
    }); 
 
});
.timeline1, .timeline2, .timeline3 { 
 
    width: 500px; 
 
    height: 40px; 
 
    border: 3px dashed gray; 
 
    margin-bottom: 10px; 
 
} 
 
.event { 
 
    height: 40px; 
 
    background: gray; 
 
    display: inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script> 
 
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" /> 
 

 
<div class="timeline1"></div> 
 
<div class="timeline2"></div> 
 
<div class="timeline3"></div> 
 

 
<div class="event">dance</div> 
 
<div class="event">sleep</div> 
 
<div class="event">eat</div>


更新的文档中发现:http://api.jqueryui.com/draggable/#option-containment

可拖动的元素会被包含到边框的边框第一个元素由选择器发现

问题仍然有效,我真的想知道如何限制droppable区域多个div?

回答

3

我不确定您是否可以使用遏制选项执行此操作,但是您可以使用snap,snapMode和还原来完成您正在尝试执行的操作。

我想timeline-droppable一个共同的类添加到您的时间表元素,使其更容易:

<div class="timeline1 timeline-droppable"></div> 
<div class="timeline2 timeline-droppable"></div> 
<div class="timeline3 timeline-droppable"></div> 

使用捕捉选项捕捉到您的可投放时间表。使用还原选项,以确定是否可拖动是在一个有效的投掷的下降:

$(function() { 
    $(".timeline-droppable").droppable(); 

    $(".event").draggable({ 
     snap: ".timeline-droppable", 
     snapMode: "inner", 
     revert: function(droppedElement) { 
      var validDrop = droppedElement && droppedElement.hasClass("timeline-droppable"); 
      return !validDrop; 
     } 
    }); 
}); 

当然还需要调整CSS使您的活动元素很好地适应你的时间表元素中。

+0

太棒了! ''''span''',''snapMode'''和'''revert'''的组合完成这项工作:) – 2015-02-08 09:27:36