2015-02-07 48 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