使用jquery ui,我有一些可拖动的div。使用相应的选项网格将DIVS快照到32x32网格:[32,32]。
用户可以在网格中移动DIV,但他也可以按住Alt键以自由移动它们而无需捕获网格。当按下alt键时,我只需将网格选项更改为[1,1]的该部门
问题是,下一次DIV要移动时,它将与[32,32]网格对齐,但会有一个偏移。
所以我需要做的是:
- DIV在32,32网格上拖动
- 用户按Alt,现在实例在1,1网格中自由移动
- 用户将DIV放置在不均匀的坐标中,例如(103,67)
- 下次DIV被拖动时,首先在32,32上正确捕捉
网格然后开始拖动(除非用户按下
除非alt)
http://jsfiddle.net/swhpa/2/(alt键在此小提琴中不动,您必须在握住alt时单击空白空间,然后拖动div才能测试免费拖动)
$(document).ready(function(){
$(".draggable").draggable({
grid: [32, 32]
});
});
$(window).on('keydown', function(event){
if (event.keyCode == 18) {
$(".draggable").draggable({
grid: [2, 2]
});
}
});
$(window).on('keyup', function(event){
if (event.keyCode == 18) {
$(".draggable").draggable({
grid: [32, 32]
});
}
});
我是新手堆栈溢出,第一次发表评论,但也许这样的事情会有所帮助:http://jsfiddle.net/swhpa/4/
var myTop = jQuery(".draggable").css("top");
var myLeft = jQuery(".draggable").css("left");
var myNewTop = 0;
var myNewLeft = 0;
myNewTop = Math.floor(myTop / 32) * 32;
myNewLeft = Math.floor(myLeft / 32) * 32;
jQuery(".draggable").css({"top" : myNewTop, "left" : myNewLeft});
放开ALT键后,您需要重新计算到最近的" 32"增量。我想到,如果您将当前的顶部/左/左划分为32,然后将其分配到最接近的整数,最后将其乘以32,您将立即回到方盒中。