0

我想在拖动开始时更改可拖动辅助位置的位置,因此网格将计入 draggindg 元素的新位置。

拖动元素在开始时更改其宽度(开始拖动)并且它不“适合”网格 [100x100]。

start: function (event, ui) {
    ui.helper.css("width", '102px');
}

这是示例:http: //jsfiddle.net/sYHre/73/

正如您在示例中看到的蓝色元素完全适合网格,但红色元素不是。我试图动态改变它的位置,但这不起作用(注释掉的代码),对象在跳跃,我认为这是 jquery ui 中的一种错误。也许有更好的方法来做到这一点?

我使用最新的 jQuery 和 jQuery UI 1.9.2

4

1 回答 1

1

一旦开始拖动,元素的宽度就会发生变化,因为它最初属于 class two,即width: 51px,但是一旦开始拖动,您的start函数就会将其更改为ui.helper.css("width", '102px')。如果你不想改变它的宽度,把那条线去掉——除了改变那个项目的宽度之外,它没有做任何事情。如果您确实希望宽度改变宽度但没有“跳跃”,您可以为更改设置动画以使其更平滑 -ui.helper.animate({width: 102}, 500)似乎可以正常工作。不过,即使这有点让人迷失方向——我建议不要改变宽度,除非有我认为没有这样做的原因。

该对象不适合网格,因为类two要求它位于 at left: 50%,这不会与您的 100 x 100 网格完美对齐。如果您希望它与网格对齐,则可以通过将其更改为left: 504px来对齐。

另一方面,如果您希望它开始,left: 50%但是一旦您开始拖动,捕捉到最近的角落,您想要添加snap: '.target'到您的选项列表中。这将迫使它捕捉到网格,即使它没有开始与网格对齐。(事实上​​,如果您愿意,您可以设置snapTolerance: 100,在这种情况下您甚至不需要网格 - 可拖动对象将始终对齐目标对象。)

这是一个更新的小提琴,显示了snap. 这是同一个 fiddle,但是宽度变化是动画的,所以你可以看到它是如何工作的。

我希望这回答了你的问题。如果不是,请尝试再次准确解释您要达到的目标。

于 2013-02-12T20:38:18.840 回答