jquery sortable的绝对定位'句柄'问题 - 在可排序元素范围的外部时不影响排序

neo*_*swf 2 jquery jquery-ui-sortable

我遇到了一个无法解决的问题.

我有一个Basecamp类似的项目列表,左侧有一个小菜单,带有拖动,编辑和废纸篓图标.

把手就在那里.他坐在可排序元素的范围之外,这就是为什么他根本不影响排序的原因.

问题演示

如您所见,我的拖动图标位于左侧.他在{LI}范围之外.LI结束时,LI结束,因此Handle离开他的父母并且不会影响所有排序并且不会启动它.

当我拖动它但是将我的鼠标移动到LI的边界内时,比它想象的那样影响和排序.

我能做什么.我打破了我的头,搜索了一个手柄偏移的属性,或者任何方式为他定义我的手柄在你的范围之外.

我希望过去有人能够面对这个问题并且可能会有所帮助:)我想把一个子弹图像放到bg上,这样就可以给LI留下更多空间了.可能会做的伎俩...... :)

谢谢

Sam*_*myK 5

我能够通过覆盖确定光标是否在元素上的方法来解决这个问题.由于我的列表与您的列表一样垂直,因此我将检查水平位置,以便仅检查垂直位置.这样,光标在水平方向的位置无关紧要.

只需在主jquery.ui.js包含之后和可排序代码之前将其覆盖以覆盖该方法:

// UI Fix for draggable
$.extend($['ui']['sortable'].prototype, {
    _intersectsWithPointer: function(item) {

        var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
            verticalDirection = this._getDragVerticalDirection(),
            horizontalDirection = this._getDragHorizontalDirection();

        if (!isOverElementHeight)
            return false;

        return this.floating ?
            ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
            : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );

    }
});
Run Code Online (Sandbox Code Playgroud)

显然,这会破坏水平排序的功能,因此您只想在特殊情况下包含它.

亲爱的jQuery UI团队:使用选项调用功能来处理此问题.:)

SammyK