Draggableのコンストラクターの「grid」オプションは、ドラッグされる要素の元の座標に比較的バインドされているように見えます。つまり、3つのドラッグ可能なdivがあり、それぞれの上部が100、200、254ピクセルに設定されている場合は、親に:
<div class="parent-div" style="position: relative;">
<div id="div1" class="draggable" style="top: 100px; position: absolute;"></div>
<div id="div2" class="draggable" style="top: 200px; position: absolute;"></div>
<div id="div3" class="draggable" style="top: 254px; position: absolute;"></div>
</div>
Adnはすべて、「grid」を[1、100]に設定してドラッグできるようになっています。
draggables = $('.draggable');
$.each(draggables, function(index, elem) {
$(elem).draggable({
containment: $('#parent-div'),
opacity: 0.7,
revert: 'invalid',
revertDuration: 300,
grid: [1, 100],
refreshPositions: true
});
});
ここでの問題は、たとえばdiv3を下にドラッグすると、上部が100増加し、46px(254 + 46 = 300)だけ増加するのではなく、354pxに移動することです。これにより、次の停止に移動します。グリッド内-300px、親-divを参照ポイントおよび「グリッドホルダー」として見ている場合。
ドラッグ可能なソースを調べましたが、これは組み込みの欠陥のようです。ドラッグ可能な要素の元の位置を基準にしてすべての計算を実行するだけです。
ドラッグ可能なライブラリのコードにモンキーパッチを適用することは避けたいと思います。ここで本当に探しているのは、ドラッグ可能なライブラリに、含まれている親に対するグリッド位置を計算させる方法です。ただし、モンキーパッチがやむを得ない場合は、一緒に暮らす必要があると思います。