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

mat*_*ias 13 jquery jquery-ui helper draggable jquery-ui-sortable

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

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

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

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

无论何时我调用我的方法(类似这样)

$someitem.trigger("toggle.somenamespace") 
Run Code Online (Sandbox Code Playgroud)

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

我原来的想法是:因为可分类的例如在实际拖拽程序开始之前测量拖曳距离的可能性(使用选项:距离),它应该可以挂钩到这个流程中,例如存储原始的startDrag函数(或者无论它被称为临时var中的可排序小部件,都可以使用自定义回调覆盖它,该回调首先触发我的折叠功能,然后调用原始函数以确保正确计算高度.但是 - 到目前为止,这种方法并没有取得多大成功......

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

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

感谢任何帮助,马蒂亚斯

编辑:将可排序标志:forceHelperSize设置为true并在开始拖动器中设置ui.item /帮助器大小也不起作用,因为它可视地产生所需的效果(仅拖动折叠的项目,但停止元素一直拖下来(好像该项目仍然具有未折叠状态的高度)用帮助器测试:'原始'和'克隆'

小智 14

我已经搜索了很长时间来寻找这个"解决方案":

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

你可以通过mousedown手柄触发一个事件并隐藏你想要的任何东西.然后在我的示例501中将sortable的选项延迟设置为大于隐藏动画持续时间的值.

它不是一个优雅的解决方案,但它的工作原理 - 至少在我的程序中.


小智 12

你可以做到这一点,但对于即将推出的jQuery UI版本来说,它不是未来的证据:

var oldMouseStart = $.ui.sortable.prototype._mouseStart;
$.ui.sortable.prototype._mouseStart = function(event, overrideHandle, noActivation) {
   this._trigger("CustomBeforeStart", event, this._uiHash());
   oldMouseStart.apply(this, [event, overrideHandle, noActivation]);
};
Run Code Online (Sandbox Code Playgroud)