【问题标题】:jQuery Sortable Items Float Right Sorting Not smooth IssuejQuery 可排序项目浮动右排序不平滑问题
【发布时间】:2019-02-10 12:40:06
【问题描述】:

当项目向右浮动时,jQuery 可排序拖动无法顺利进行。我尝试修复它但没有成功,我不明白为什么这是一个问题。

要重现和理解该问题,您需要尝试拖动项目,您会发现有时您喜欢将项目放置在某个地方,而占位符则停留在另一个地方。请参阅附图以更好地理解。

当删除 float:right 属性时,它会工作得很好。

注意:这个问题有点难以理解,我在 jsfiddle 上重现了它,但你需要玩它才能理解它

https://jsfiddle.net/royshoa/4Lprn9bs/72

我很乐意为此得到一些答案。

【问题讨论】:

    标签: css jquery-ui jquery-ui-sortable


    【解决方案1】:

    看起来#sortable 右侧的浮动会扰乱jquery-ui-sortable 的行为。

    保持您的相反顺序 (3,2,1) 并向右对齐并保持所需的功能按照您的描述工作:

    • #sortable 中取出float:right 并将其放在 父.example-box: 现在父容器浮动到 对,但不影响#sortable

    • 要获得相反的 3、2、1 顺序,您只需要反转
      使用 get().reverse() 在您的 jQuery 代码中排序元素。这样做的顺序现在不是 不再影响jquery-ui-sortable,因为不再使用float:right

    html:

    <div class="example-box">
      <ul id="sortable">
        <li class="ui-state-default">1</li>
        <li class="ui-state-default">2</li>
        <li class="ui-state-default">3</li>
      </ul>
    </div>
    

    css:

    .example-box {
      margin: 50px;
      border: 1px solid navy;
      float: right;
    }
    
    #sortable {
      list-style-type: none;
      margin: 0;
      padding: 0;
    }
    
    #sortable li {
      margin: 3px 3px 3px 0;
      padding: 1px;
      width: 120px;
      height: 120px;
      font-size: 4em;
      text-align: center;
      float: left;
    }
    
    #sortable li {}
    
    .draggable-placeholder {
      border: 2px dashed #D9D9D9 !important;
      background-color: #F7F7F7 !important;
    }
    

    jQuery:

    jQuery(function($) {
    
      $('#sortable').sortable({
        opacity: 0.8,
        revert: true,
        forceHelperSize: true,
        forcePlaceholderSize: true,
        placeholder: 'draggable-placeholder',
        tolerance: 'pointer',
        axis: 'x'
      });
    
      var list = $('ul#sortable');
      var listItems = list.children('#sortable>li');
      list.append(listItems.get().reverse());
    
    });
    

    这是一个有效的 jsfiddle:https://jsfiddle.net/n7b9wezj/3/

    注意:我设置了axis:x,因为它显示了更好的功能,但您不需要设置它。蓝色边框只是为了说明div的位置...

    编辑以反映 cmets 这是另一个使用 flexbox 的示例:https://jsfiddle.net/y9qd08bn/1/ 我已将宽度设置为 90%,所以它在小提琴中看起来更好,但您可以使用 100%。

    【讨论】:

    • 您的解决方案运行良好,我有一个问题,因为在我的情况下,我无法正确浮动 UL,因为我需要它的宽度为 100%,并且在这种情况下,项目仍在左侧(我尝试使用 flex-box 移动它们,但拖动效果不佳)。如果您可以直接从 JavaScript 中将其作为补丁修复,那将会很糟糕。
    • 另外,当我出于某种原因将浮动右侧添加到 UL 标签时,当我开始拖动时,助手显示在光标左侧约 100px 处,我没有在 jsfiddle 重现它,但在我身边它发生了,你能想到为什么吗? (我无法在评论中附上截图)
    • 我已经更新了答案,添加了一个使用 flexbox 的示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多