包含可拖动的圆到更大的圆
Containing draggable circle to a larger circle
我真的很难解决这个问题,我需要使用javascript将一个小圆圈限制在一个大圆圈的范围内。
示例如下:http://jsfiddle.net/z9vqLnsL/1/
$(函数(){$("#draggable").traggable({containment:"#containmentwrapper",start:函数(){
},
drag: function (evt) {
console.log(evt);
var D = Math.sqrt(Math.pow(($('#containment-wrapper').width() / 2) - evt.clientX, 2) + Math.pow(($('#containment-wrapper').width() / 2) - evt.clientY, 2));
if (D <= ($('#containment-wrapper').width() / 2)) {
$('#check').html('inside');
} else {
$('#check').html('outside');
$("#draggable").left(x_last);
$("#draggable").right(y_last);
}
},
stop: function () {
}
});
});
我试着将圆圈设置为最后的x和y值,如果圆圈被拖到外面,但它真的很跳跃,不能顺利工作。
请帮忙吗?
更新:通过以上操作,我设法将圆保持在边界内,但它停止了拖动动作。
一种方法是限制小圆坐标与原点的距离,这里是大圆的中心:
$(function () {
$("#draggable").draggable({
drag: function (e, ui) {
var r = $('#containment-wrapper').width()/2;
var small_r = $('#draggable').width()/2;
var origin_x = r - small_r;
var origin_y = r - small_r;
var x = ui.position.left - origin_x, y = ui.position.top - origin_y;
var l = Math.sqrt(x*x + y*y);
var l_in = Math.min(r - small_r, l);
ui.position = {'left': x/l*l_in + origin_x, 'top': y/l*l_in + origin_y};
},
});
});
Fiddle。
顺便说一句,这不是超级灵活的,如果需要将大圆更改为任意形状,那么处理好任意情况是相当复杂的。
相关文章:
- 调整窗口大小时,可拖动的对象会出现在容器外部
- JQuery UI可拖动潜水与滚动棒到鼠标
- 如何使元素在可拖动元素内可单击
- 使元素在iframe中可拖动
- 如何使所有绘制的(矩形、圆形、直线、多边形)都可拖动?纯JS
- 拖动开始时更改可拖动元素的大小
- 如何在侦听器之后添加可拖动功能
- 使Javascript切换可拖动
- 我如何获得“”的原始位置;ui“可拖动”;在“;drop”;事件
- jQuery UI可拖动:自定义捕捉方法
- html/javascript中的可拖动文本
- 如何将可调整大小、可拖动的覆盖添加到网页中
- 推特Boostrap模式窗口-可拖动不工作
- jquery 可拖动自定义包含
- JQuery 不包含可拖动的帮助程序
- jQuery 可拖动包含溢出隐藏
- 包含可拖动的圆到更大的圆
- jQuery UI的可拖动包含选项
- 在videojs播放器上正确包含可拖动标记
- 可拖动项的包含选项