Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery UI可拖动:自定义捕捉到方法_Javascript_Jquery_Jquery Ui_Drag And Drop_Drag - Fatal编程技术网

Javascript jQuery UI可拖动:自定义捕捉到方法

Javascript jQuery UI可拖动:自定义捕捉到方法,javascript,jquery,jquery-ui,drag-and-drop,drag,Javascript,Jquery,Jquery Ui,Drag And Drop,Drag,我知道jQueryUIAPI内置了snap、snapMethod和snapTolerance,但在这种情况下这些都不起作用 我面临的问题是:在容器内拖动时,我希望在一定距离内拖动的对象捕捉到容器的边缘。计算距离并触发此操作不是问题。这是一个我无法工作的地方 我期望的是:$draggable.position().left=0可能会将其捕捉到父容器的左边缘,但没有任何区别 这里有一把小提琴来演示: JS: //设置可拖动 $('.drag').draggable({ drag:function()

我知道jQueryUIAPI内置了
snap
snapMethod
snapTolerance
,但在这种情况下这些都不起作用

我面临的问题是:在容器内拖动时,我希望在一定距离内拖动的对象捕捉到容器的边缘。计算距离并触发此操作不是问题。这是一个我无法工作的地方

我期望的是:
$draggable.position().left=0
可能会将其捕捉到父容器的左边缘,但没有任何区别

这里有一把小提琴来演示:

JS:

//设置可拖动
$('.drag').draggable({
drag:function(){drag($(this))},
包含:'父',
});
//拖
函数拖动($draggable){
var snap_公差=10;
//拖拉的
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=$('.wrapper');
var w_top=0;
var w_bottom=$wrapper.height();
var w_left=0
var w_right=$wrapper.width();
//向左转
如果(d_左=(w_右捕捉_公差)){
log('snap right');
$draggable.position().left=(w_right-$draggable.width());
_snap内=真;
}
//猛击顶部
如果(d_顶部=(w_底部捕捉_公差)){
console.log('snap-bottom');
$draggable.position().top=(w_bottom-$draggable.height());
_snap内=真;
}     
}//端部fn阻力
下面是一个例子

您需要指定一个网格,如下所示:

<script>
$(function() {
    $( "#draggable4" ).draggable({ grid: [ 20, 20 ] });
    $( "#draggable5" ).draggable({ grid: [ 80, 80 ] });
});
</script>

$(函数(){
$(“#draggable4”).draggable({grid:[20,20]});
$(“#draggable5”).draggable({grid:[80,80]});
});

我已经设法让它工作了。虽然我必须说,我并不完全理解正在发生的事情。以下是我所做的更改():

因此,在拖动事件中,我将ui对象以及jQuery对象(我想,如果我对ui对象的理解有误,请纠正我)传递到
拖动
函数中

//snap to left
if( d_left <= (w_left+snap_tolerance )){
  console.log('snap left');
  ui.position.left = w_left; 
  within_snap = true;
}
//向左捕捉

如果(d_)离开了,谢谢,但是网格解决方案在我正在开发的应用程序中不起作用。
//set draggable
$('.drag').draggable({
  drag: function(e, ui){ drag($(this), ui) },
  containment: 'parent',
});
//snap to left
if( d_left <= (w_left+snap_tolerance )){
  console.log('snap left');
  ui.position.left = w_left; 
  within_snap = true;
}