jQuery UI APIにはsnap
,snapMethod
、snapTolerance
が組み込まれていますが、この場合は動作しません。jQuery UI Draggable:カスタムスナップ方法
私が直面している問題は次のとおりです。コンテナ内をドラッグすると、ある距離以内にドラッグするとコンテナの端にスナップすることができます。距離を計算し、これを引き起こすことは問題ではありません。それは私が仕事に得ることができないスナップにドラッグ可能になっています。
$draggable.position().left = 0;
は、親コンテナの左端にスナップするかもしれませんが、違いはありません。ここで
を実証するためのフィドルです:https://jsfiddle.net/jwxrevL2/1/
JS:
//set draggable
$('.drag').draggable({
drag: function(){ drag($(this)) },
containment: 'parent',
});
//drag
function drag($draggable){
var snap_tolerance = 10;
//Draggable
var d_top = $draggable.position().top;
var d_middle = ($draggable.position().top+($draggable.height()/2));
var d_bottom = ($draggable.position().top+$draggable.height());
var d_left = $draggable.position().left;
var d_center = ($draggable.position().left+($draggable.width()/2));
var d_right = ($draggable.position().left+$draggable.width());
//Wrapper
var $wrapper = $('.wrapper');
var w_top = 0;
var w_bottom = $wrapper.height();
var w_left = 0
var w_right = $wrapper.width();
//snap to left
if(d_left <= (w_left+snap_tolerance)){
console.log('snap left');
$draggable.position().left = w_left;
within_snap = true;
}
//snap to right
if(d_right >= (w_right-snap_tolerance)){
console.log('snap right');
$draggable.position().left = (w_right-$draggable.width());
within_snap = true;
}
//snap to top
if(d_top <= (w_top+snap_tolerance)){
console.log('snap top');
$draggable.position().top = w_top;
within_snap = true;
}
//snap to bottom
if(d_bottom >= (w_bottom-snap_tolerance)){
console.log('snap bottom');
$draggable.position().top = (w_bottom-$draggable.height());
within_snap = true;
}
}//end fn drag
グリッドソリューションは、私が取り組んでいるアプリケーションでは動作しません。 – user3065931