javascript - 存在隐藏元素时 jQuery 可排序滞后

标签 javascript jquery css jquery-ui

我遇到一个问题,如果存在隐藏元素,jQuery 可排序项很难在可排序元素中找到它们的位置。在下面的 jsfiddle 中,有 2 个示例。首先,有 6 个元素,其中 3 个是隐藏的(这是一种让人感觉迟钝的可排序元素,元素似乎不知道将自己放置在哪里)。第二个,有 6 个元素,没有一个是隐藏的。与第一个示例不同,它们将顺利移动到位。

有谁知道为什么会这样?看起来这可能是一个 css 问题,但我不确定在哪里。我在工作中遇到了一个更大的问题,但试图将代码简化为 jsfiddle。

http://jsfiddle.net/e234g/4/

<div class="sortable leftPanels">
    <div class="panel hide">panel 1</div>
    <div class="panel hide">panel 2</div>
    <div class="panel hide">panel 3</div>
    <div class="panel">panel 4</div>
    <div class="panel">panel 5</div>
    <div class="panel">panel 6</div>
</div>
<br /><br />
<div class="sortable leftPanels">
    <div class="panel">panel 1</div>
    <div class="panel">panel 2</div>
    <div class="panel">panel 3</div>
    <div class="panel">panel 4</div>
    <div class="panel">panel 5</div>
    <div class="panel">panel 6</div>
</div>
.panel{
    background-color:#eee;
    display:inline-block;
    margin:5px;
}

.sortable{
    padding: 10px;
    padding-top:15px;
    background-color:#999;
    list-style-type: none;
    height:50px;
}

.panel-placeholder{
    background-color:#333;
    display:inline-block;
}
.hide{
    display:none;
}
$(".sortable").sortable({
    placeholder: 'panel-placeholder',
    start: (event, ui) ->
        $('.panel-placeholder').width(ui.item.width()).height(ui.item.height())            
}).disableSelection();

感谢帮助

最佳答案

我似乎已经通过不必使用 display:none 的变通方法解决了问题。创建此隐藏类并添加或删除它以切换可见性。

.hidden {
    width:0px !important;
    overflow:hidden;
    visibility:hidden;
    display: block !important;
}

如果您使用的是 .toggle() 或者在我的例子中是 .fadeToggle() 它会自动将显示设置为无。要解决此问题,您可以执行以下操作来修复它。请记住 .toggle() 将使显示具有更高的 css 特异性,因此您需要在隐藏类中覆盖它。

panelVisible = viewModel.panelIsVisible(panelName)
currentlyVisible = $(element).is(":visible") and $(element).css('visibility') is 'visible'

unless panelVisible is currentlyVisible
  if not currentlyVisible
    $(element).removeClass('panel-hidden')
  $(element).fadeToggle panelVisible, () => 
    if not panelVisible
      $(element).addClass('panel-hidden')

关于javascript - 存在隐藏元素时 jQuery 可排序滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222256/

相关文章:

javascript - 基于单选按钮选择禁用按钮

javascript - 遵守 WCAG 2.0 AA 是否会阻止使用 JavaScript?

javascript - 如何在angularjs中观察这个变量

Javascript 点表示法 = 未定义

javascript - 在 JQuery 中克隆并为每个添加唯一的 ID

html - Div 不清除 float

javascript - 将 jquery 动画转换为 CSS3

javascript - addthis、isotope 和 nicescroll 合而为一

html - 响应式设计 - 2 列缩减为 1 列

javascript - 向 tbody 添加滚动条后如何将 tbody 与 thead 对齐(显示 : block)