【问题标题】:Odd Behavior with jQuery Sortable: Box not staying in the same place when draggingjQuery Sortable 的奇怪行为:拖动时框不在同一个地方
【发布时间】:2013-02-05 18:46:18
【问题描述】:

我正在构建的仪表板上实现 jQuery 可排序,以便用户可以自定义他们的仪表板视图。

单击句柄时,仪表板左侧和中心的元素会正常运行。然而,当我尝试拖动它们时,最右边的元素表现出奇怪的行为。我仍然可以将它们拖放到网格周围,但鼠标没有留在手柄上……框在屏幕上跳跃。

这里发生了什么?为什么它只发生在边缘盒上,有没有办法解决这个问题?

Here's the live dashboard. View the source to see the code.

这是正确行为的屏幕截图。鼠标在移动符号框的一角:

这是奇怪行为的屏幕截图。鼠标其实是在空白的灰色空间,但是模块已经跳到了浏览器的左下角:

【问题讨论】:

  • 无法重现您描述的问题。您使用的是哪个浏览器(版本)?
  • Chrome 25.0.1364.99 测试版。

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


【解决方案1】:

这与浏览器计算百分比值有关。

您正试图在各种组件中使用 100% 的浏览器宽度。例如,如果浏览器尝试计算 23% 的浏览器宽度是 4 倍,然后计算 1% 的边距是 8 倍(加起来是预期的 100%),则不能保证这些总和舍入后组件不会超过浏览器窗口的实际宽度。某些总宽度会起作用,而其他的则不会。

让我们用一些数学来分解它。如果我们将宽度限制为 503px 的宽度,我们可以进行如下计算并看到我们超过了最大宽度。

503px * 0.23 宽度 = 115.69 ≈ 116px

503px * 0.01 边距 = 5.03 ≈ 5px

(4 boxes * 116px per box) + (4 boxes * 2 margins * 5px 每边距) = 464px + 40px = 504px

DEMO (Incorrect Behavior) - 最大宽度设置为503px

但是,如果我们将宽度限制为 500 像素,则计算结果恰好符合我们的预期。

500px * 0.23 宽度 = 115px

500px * 0.01 边距 = 5px

(4 boxes * 115px per box) + (4 boxes * 2 margins * 5px 每边距) = 460px + 40px = 500px

DEMO (Correct Behavior) - 最大宽度设置为500px

这只发生在页面右边缘的项目上,因为那里会发生换行。当没有足够的可用水平空间时,设置为float: left 的项目将自动换行。这就是为什么该项目基本上会转到下一行的第一个位置。

鉴于初始状态不受影响,实际问题似乎是由 jQuery UI 在排序期间执行的额外计算和 DOM 操作触发的。

【讨论】:

  • 很棒的答案。这有很大帮助。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
相关资源
最近更新 更多