【发布时间】:2020-01-04 02:06:45
【问题描述】:
在我正在编写的 Web 应用程序中,用户可以将自己的自定义按钮添加到控制面板,然后通过拖放更改这些按钮的顺序。我正在使用 jQuery UI 的 Sortable Widget 来实现这一点。
按钮从左到右排成一行。我正在使用 flexbox 来设置它们的样式,并且我设置了 sortable 方法以允许仅沿 X 轴移动。在大多数情况下,一切都运行良好,但是……
- 有时当我将一个按钮一直拖到开头 行,最左边的按钮不会移开以腾出空间 为它。
- 有时,当行已填满时,也会发生同样的事情 按钮,我尝试将一个按钮一直拖到行尾。 (最右边的按钮不会移动。)
起初,我不明白为什么最左边和最右边的按钮有时会按预期工作,有时却没有。最终我意识到这一切都取决于我抓住我拖动的按钮的位置。我设置的 JSFiddle 说明了这个问题:
https://jsfiddle.net/DanRobinson/8nap51Lg/78/
在 Fiddle 中,如果您抓住靠近其左边缘的中间按钮,您可以成功将其拖到行首,但不能拖到行尾。相反,如果您抓住靠近其右边缘的同一个按钮,您可以将其拖到行尾,但不能拖到行首。
无论用户碰巧在哪里抓取按钮,我都希望按钮的行为始终如一。 Sortable Widget 中是否有可以解决此问题的设置? (将“公差”设置更改为“指针”似乎没有帮助。)
HTML:
<div id="container">
<div>Custom Button 1</div>
<div>Custom Button 2 is wider than the others</div>
<div>Custom Button 3</div>
</div>
CSS:
#container {
display: flex;
flex-direction: row;
padding: 10px;
border: 1px solid black;
margin-top: 20px;
width: 600px;
}
#container > div {
flex: 0 1 auto;
padding: 2px 8px;
margin: 0 5px;
border: 1px solid #777;
border-radius: 3px;
background-color: #E1E1E1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
cursor: default;
}
Javascript:
$(document).ready(function () {
$("#container").sortable({
axis: "x",
containment: "parent",
});
});
【问题讨论】:
标签: jquery jquery-ui jquery-ui-sortable