【问题标题】:jQuery Sortable with collapsed content带有折叠内容的 jQuery 可排序
【发布时间】:2017-08-29 22:23:09
【问题描述】:

我想对所有用户使用 jQuery 可排序功能来排列框。很简单。然而,这些盒子可能会变得非常高,所以当他们点击手柄进行排序时,我希望所有的盒子都折叠起来。我得到了一些工作(如下所示)。当您尝试对第一行进行排序时,一切正常。但是任何低于它的东西都会变得有点奇怪。

首先,有没有我没想到的更好的方法来做到这一点?

其次,如果我继续使用这段代码,有没有办法确保现在折叠的 div 是 select 捕捉到并留在鼠标上?如果你现在看,当你选择一个不是从第一行开始的 div 时,被选中的 div 比鼠标所在的位置高很多(因为折叠了)。

jsFiddle:http://jsfiddle.net/cwv9usqf/5/

$('.header').mousedown(function(){ $('.content').hide(); })

$('.container').sortable({
  connectWith: '.container',
  items: '.portlet',
  handle: '.header',
  tolerance: 'pointer',
  stop: function(){ $('.content').show(); }
});

另一个注意事项:现在只要单击标题,portlet 就会崩溃。有没有办法只能在拖动发生时让它们崩溃?

提前致谢!

【问题讨论】:

  • 我用一些东西更新了 Fiddle:portlet 并不总是重新打开,所以我在“停止”上添加了一个事件,以便可排序来解决这个问题。我还设置了容差,因此至少功能可以按预期工作。视觉上它仍然是错误的......

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


【解决方案1】:

我想通了:

(更新小提琴)http://jsfiddle.net/cwv9usqf/6/

$('.container').sortable({
  connectWith: '.container',
  items: '.portlet',
  handle: '.header',
  tolerance: 'pointer',
  revert: true,
  placeholder: 'placeholder',
  start: function(){ $('.content').hide(); },
  stop: function(){ $('.content').show(); }
});

我为其添加了“开始”选项,并一起删除了 mousedown/mouseup 侦听器。

【讨论】:

  • 老兄,如果您折叠第一个项目作为开始事件并在 y 轴上拖动 doen,则只有在到达最后一个项目时才会更新位置。我面临同样的问题,我认为这是一个库错误。你的第一个例子更好。
【解决方案2】:

几件事:

  1. 我让您的元素无法选择,这样您就不会意外突出显示它。
  2. 我将其更改为无序列表,以删除重复代码。
  3. 我将光标指向一个指针,因为这对于难以处理的项目来说是相当标准的。
  4. 为了制作动态网页,我使用了 flex 而不是 px 值。

$("#sortable").sortable({
  revert: true
});
#sortable { 
  width: 100%; 
  list-style-type:none;
  display: flex;
  justify-content: space-between;
  -webkit-user-select: none; /* Chrome/Safari */        
  -moz-user-select: none; /* Firefox */
  -ms-user-select: none; /* IE10+ */
  -o-user-select: none;
  user-select: none;
}

#sortable > li {
  float: left;
  cursor: pointer;
  padding: 0.5em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div class="demo">
    <div>
        <ul id="sortable">
          <li>Home</li>
          <li>Contact Us</li>
          <li>About</li>
        </ul>
    </div>
</div>

【讨论】:

  • 对不起 - 我发布了错误的 jsFiddle。您正在查看的那个是我从中获得一些参考资料的地方。请检查更新的链接。
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多