2013-05-05 80 views
2

我在JQuery中有一個可拖動的元素,如果您將它拖到某個區域上,它有一個網格,並且如果您將它拖到另一個區域上,則它沒有網格(或者網格設置爲[1,1],同樣的事情)。這裏是我的代碼:JQuery ...調整網格偏移中拖動

$('#draggableThing').draggable({ 
     drag:function(){ 
      if (isOverRegionWthGrid()) 
      { 
       $(this).draggable('option','grid',[1,20]) 
      } 
      else 
      { 
       $(this).draggable('option','grid',[1,1]) 
      }}}) 

迄今爲止工作很好。唯一的問題是,當我從無網格區域拖到具有網格的區域時,網格的「偏移」不一致。我需要它與每次拖動時不會上下變換幾個像素的網格對齊。看來,JQuery通過可拖動元素的初始位置來定義網格。有沒有任何意見給電網絕對的位置,或任何解決方法?

謝謝!

+2

您可以發佈[的jsfiddle(HTTP://的jsfiddle 。淨)? – apaul 2013-05-13 01:22:19

+0

當拖動開始時,您可以查看[drag start event](http://api.jqueryui.com/draggable/#event-start)將元素移動到網格上。 – 2013-05-13 15:38:48

+0

http://jsfiddle.net/ECyUa/1/ – 2013-05-18 17:46:46

回答

0

使用CSS,定位網格元素並將其設置爲絕對定位?

+0

有一個網格元素?我不知道底層代碼是如何工作的。 – 2013-05-18 17:23:18

0

我會建議,當切換回到1,20時,您將可拖動的可拖動對象移動到要使用模分割的網格中的座標。例如:(currentX - gridOriginX)%cellWidth,(currentY - gridOriginY)%cellHeight。

在下面的示例中,我只是使用可拖動元素的原始位置來確定網格應爲的位置。我也使用可拖動的「over」事件來代替「drag」事件。

HTML:

<div id="thing"> 
<div id="draggable5" class="draggable ui-widget-content"> 
    <p>Drag Me</p> 
</div> 
</div> 
<div id="thing2"> 
</div> 

CSS:

#draggable5 { 
    width: 100px; 
    height: 100px; 
    border: 1px solid #999; 
} 
#thing { 
    height: 150px; 
    border: 1px solid #900; 
} 
#thing2 { 
    height: 150px; 
    border: 1px solid #00F; 
} 

的Javascript:

$(document).ready(function() { 

    var obj = $("#draggable5"); 
    obj.draggable({ 
     grid: [ 1, 20 ], 
    }).data("init", obj.offset()); 

    $("#thing").droppable({ 
     over: function(e, ui) { 
      obj = ui.draggable; 
      var init = obj.data("init"); 
      var here = obj.offset(); 
      here.top = init.top + Math.floor((here.top - init.top)/20) * 20; 
      here.left = init.left + Math.floor((here.left - init.left)/1) * 1; 
      obj.offset(here); 
      obj.draggable("option", "grid", [ 1, 20 ]); 
     } 
    }); 
    $("#thing2").droppable({ 
     over: function(e, ui) { 
      obj = ui.draggable; 
      obj.draggable("option", "grid", [ 1, 1 ]); 
     } 
    }); 
}); 

小提琴:http://jsfiddle.net/qaqDz/3/

+0

謝謝,終於有人企圖回答!稍後我會更仔細地看看這一點,但乍一看似乎並不幸運。當我用[1,1]網格將區域中的元素放下時,然後將其拾取並移動到[1,20]網格,網格再次關閉。這正是我的問題。它可以正常工作,如果您來回拖動它,但如果放入光滑區域然後拖入網格區域,則不起作用。 – 2013-05-18 17:21:54

+0

對不起,直到現在纔看到您的評論!我繞了一下,發現你可以混淆jQueryUI可拖動的數據,當你開始拖動。特別是,如果使用$(「#draggable5」)。data(「draggable」),則會得到具有屬性originalPageX和originalPageY的對象。這些是拖動開始時的鼠標座標。從理論上講,如果您通過正確的數量來抵消這些因素,您可以將其恢復到網格中。我無法工作,但稍後可能有時間再次檢查。 – 2013-06-29 01:10:35

+0

謝謝安迪!我認爲你可能會做些什麼...我會嘗試一點點弄亂這些值。 – 2013-07-04 11:01:15