Jquery UI可排序 - 在启动事件触发之前执行操作

时间:2012-03-21 12:01:59

标签: jquery jquery-ui draggable jquery-ui-sortable helper

我已经搜索了STACKOVERFLOW和其他论坛以解决我的问题 - 如果我错过了一个有效的解决方案,请指出我。

我的问题: 每当在可排序列表中拖动一个元素(一个portlet div)时,我需要在实际拖动过程开始之前执行一些操作(从我在触发START事件之前的理解)。

更具体一点: 我的DIV为用户提供了扩展/折叠它的身体的可能性(就像在jquery UI页面http://jqueryui.com/demos/sortable/#portlets中的示例一样)。

每当拖动一个元素时,我都想触发我的折叠方法,以便拖动的唯一可视元素是折叠的DIV。

然而每当我打电话给我的方法时(类似这样)

$someitem.trigger("toggle.somenamespace") 

它按预期工作,除了在sortable中触发start事件之前计算拖动帮助器的HEIGHT,因此帮助器具有处于未折叠状态的原始元素的高度。

我最初的想法是:因为可分类的例如在实际拖动过程开始之前测量拖动距离的可能性(使用选项: distance )应该可以挂钩到此流程中,例如存储原始的 startDrag 函数(或其任何名称)临时var中的可排序窗口小部件,使用自定义回调覆盖它,首先触发我的折叠功能,然后调用原始函数以确保正确计算高度。 但是 - 到目前为止,我对这种方法没有太大的成功......

请注意,在处理程序中为拖动或在可排序事件上设置CSS属性没有达到预期效果,因为为帮助程序计算的可排序窗口小部件的高度设置为元素属性。

或者 - 可能有人知道更好的方法来影响在拖动过程中显示的助手的高度,这只是我的观点,我的原始方法(在拖动过程之前更改元素然后让小部件执行它计算它的意图)将是一个更好的解决方案...

感谢您的帮助, 的Matthias

编辑: 将sortable标志:forceHelperSize设置为true并在start draghandler中设置ui.item / helper大小也不起作用,因为它会在视觉上产生所需的效果(仅拖动折叠的项目,但会阻止元素被拖拽一直(就好像项目仍然处于未折叠状态的高度) 用帮助器测试:'原始'和'克隆'

1 个答案:

答案 0 :(得分:14)

我长时间搜索这个“解决方案”:

$('.handle').each(function() {
    $(this).mousedown(function() {
        $(this).parent().parent().children('ol').hide('blind', 500);
    });
});

您可以通过隐藏手柄来触发事件并隐藏您想要的任何内容。然后在我的示例501中将sortable的选项延迟设置为大于隐藏动画持续时间的值。

这不是一个优雅的解决方案,但它有效 - 至少在我的计划中。