jQuery 可排序,包含父级和不同的项目高度

标签 jquery jquery-ui jquery-ui-sortable

请将此问题与此 jsFiddle 一起阅读.

我有一个 jQuery 可排序列表,我想在拖动时将项目包含在父容器中 - 没问题 - 我使用 containment:'parent'选项。

但是,当第二个项目的高度大于第一个项目的高度时,我无法将第二个项目拖动到第一个位置。

我尝试使用附加选项tolerance:'pointer',但没有成功(我的偏好)它也不适用于默认的 tolerance:'intersect' .

我从 docs 了解到这是 tolerance 的预期行为当项目具有相同高度时,工作绝对正常。

对于第二个项目的高度高于第一个项目的情况,是否有解决方法?

最佳答案

添加选项 cursorAt: { top:1 } 可以解决该问题。链接至 docs .

不幸的是,我随后发现在尝试将一个高项目拖到列表底部时存在同样的问题。

最后我的解决方案是破解 jquery.ui.sortable.js 中的 _intersectsWithPointer 函数。

我已经替换了:

var c = this.options.axis === "x"|| a.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, b.top, b.height),

与:

var c = this.options.axis === "x"|| a.ui.isOverAxis(this.positionAbs.top + (this._getDragVerticalDirection() == "up"? 0 : this.helperProportions.height), b.top, b.height),

现在,向上或向下拖动任何高度的任何项目都可以正常工作。

关于jQuery 可排序,包含父级和不同的项目高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520532/

相关文章:

jQuery onclick 切换功能

jquery-ui - 如何使用轨道:true?使工具提示仅水平跟踪鼠标

jquery - 取消拖动可排序项目

javascript - HTML 中的交叉合并表列和行

javascript - Jquery中的.data()总是返回 "undefined"

具有自动完成功能的 jQuery 网格

javascript - angularjs ui-sortable : cannot call methods on sortable prior to initialization; attempted to call method 'refresh'

jquery - 有没有办法在拖动可排序项目时刷新可排序项?

javascript - 将日期转换为 ISOString 后删除时间

javascript - 重新加载页面以显示注入(inject)的 jQuery UI 元素?