Jquery 可拖放收容半径
Jquery Dragabale containment radius
我正在尝试模拟操纵杆的行为。你可以向任何方向推动操纵杆,但它对你可以推动的距离有限制,一旦你松开操纵杆,它就会恢复到原来的位置。我正在使用 jquery 可拖动。恢复位置很容易,我面临的问题是将操纵杆保持在圆圈内。
HTML:
<div class="demo">
<div id="draggable4" class="draggable draginvalid ui-widget-content">
drag me
</div>
</div>
JS:
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid"
});
我有一个 fiddle 来显示此行为
关于如何实现操纵杆包含在圆圈内的行为的任何想法? TIA
从这里开始:
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid",
drag: function(e, d) {
console.log(d);
d.position.left = Math.max(-40, Math.min(40, d.position.left));
d.position.top = Math.max(-40, Math.min(40, d.position.top));
}
});
它目前只允许每个方向有 40 个变化。当然,它还没有完美地保持在圈子中,但使用正确的公式你可以到达那里。
也看看你的控制台。我正在打印可以影响位置的对象。
希望这对您有所帮助:)
编辑:
这里是完美圆的代码。你只需要稍微调整一下内圈的位置。它不正好在中间。此外,您可能需要更改数字 44,这是您可以在每个方向上移动操纵杆的最大像素数。
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid",
drag: function(e, d) {
maxMove = 44;
maxMoveSqr = 44*44;
l = d.position.left;
t = d.position.top;
len = l*l+t*t;
if (maxMoveSqr < len) {
d.position.left = l / Math.sqrt(len) * maxMove;
d.position.top = t / Math.sqrt(len) * maxMove;
}
}
});
欢迎优化 ;)
我正在尝试模拟操纵杆的行为。你可以向任何方向推动操纵杆,但它对你可以推动的距离有限制,一旦你松开操纵杆,它就会恢复到原来的位置。我正在使用 jquery 可拖动。恢复位置很容易,我面临的问题是将操纵杆保持在圆圈内。
HTML:
<div class="demo">
<div id="draggable4" class="draggable draginvalid ui-widget-content">
drag me
</div>
</div>
JS:
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid"
});
我有一个 fiddle 来显示此行为
关于如何实现操纵杆包含在圆圈内的行为的任何想法? TIA
从这里开始:
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid",
drag: function(e, d) {
console.log(d);
d.position.left = Math.max(-40, Math.min(40, d.position.left));
d.position.top = Math.max(-40, Math.min(40, d.position.top));
}
});
它目前只允许每个方向有 40 个变化。当然,它还没有完美地保持在圈子中,但使用正确的公式你可以到达那里。
也看看你的控制台。我正在打印可以影响位置的对象。
希望这对您有所帮助:)
编辑: 这里是完美圆的代码。你只需要稍微调整一下内圈的位置。它不正好在中间。此外,您可能需要更改数字 44,这是您可以在每个方向上移动操纵杆的最大像素数。
$( ".draginvalid" ).draggable({
distance: 1,
revert: "invalid",
drag: function(e, d) {
maxMove = 44;
maxMoveSqr = 44*44;
l = d.position.left;
t = d.position.top;
len = l*l+t*t;
if (maxMoveSqr < len) {
d.position.left = l / Math.sqrt(len) * maxMove;
d.position.top = t / Math.sqrt(len) * maxMove;
}
}
});
欢迎优化 ;)