javascript - 如何在没有捕捉的情况下自由移动后正确捕捉 jQuery UI 可拖动回到网格

标签 javascript jquery html jquery-ui

使用 jQuery UI,我有一些可拖动的 DIV。 DIV 使用相应的选项网格捕捉到 32x32 网格:[32, 32]。

用户可以在网格中的 DIV 周围移动,但他也可以按住 Alt 键自由移动它们,而无需捕捉到网格。当按住 Alt 键时,我只需将该 DIV 的网格选项更改为 [1, 1]。

问题是下次移动 DIV 时,它会对齐到 [32,32] 网格,但会有偏移。

所以我需要做的是:

  • DIV 在 32,32 网格上拖动
  • 用户按下 Alt,现在实例在 1,1 网格中自由移动
  • 用户将 DIV 放置在不均匀坐标的某处,例如 (103, 67)
  • 下次拖动 DIV 时,首先将其正确捕捉到 32,32
    网格然后开始拖动(当然除非用户按下
    替代)

http://jsfiddle.net/SwHpa/2/ (ALT 键在这个 fiddle 中不能很流畅地工作,你必须在按住 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,然后 Math.floor 它到最接近的整数,最后乘以 32 你就会马上回到方框里。

关于javascript - 如何在没有捕捉的情况下自由移动后正确捕捉 jQuery UI 可拖动回到网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22263443/

相关文章:

jquery - 如何在 JQuery 中创建一个简单的模态对话框?

javascript - 如何使用 jquery 按顺序悬停多个元素?

javascript - 更改:active pseudo-class' style with jQuery

javascript - 在从 Chrome 中的 javascript 卸载之前,Flash 无法发送 HTTP 请求

javascript - 循环内的 Vue 组件

javascript - 如何在分页中加载数据 - jqGrid?

javascript - jQuery 2.x - .on 函数无法正常工作

javascript - jQuery .before() 重新执行 javascript

css - 在 html5 中工作的水平规则标记 `<hr>` 的替代方案

javascript - 为什么我不能在 jQuery 中使用这个正则表达式过滤器选择这个输入字段?