3

我有一个可排序的扑克牌列表。为了只显示卡片的顶部,我为每张卡片设置了一个负的底部边距。一旦我这样做了,jQuery sortable 就会变得非常不稳定并且难以使用。我怎样才能消除这个过滤器? 在闪烁之上,如何获得正确的垂直对齐以进行拖动?似乎我必须在列表的上方或下方移动,才能将占位符移动到列表的两侧。

我已将我的代码放在http://jsfiddle.net/otac0n/wDTwX/以便您可以感受一下,但这里是它的要点:

// HTML
<div class="deck" data-bind="sortable: { data: Cards, options: { placeholder: 'card', cursorAt: { left: 5, top: 5 }, tolerance: 'pointer' } }">
    <div class="card" data-bind="text: Name, style: { background: Color }"></div>
</div>

// CSS
.deck
{
    margin: 10px;
    padding: 0 0 130px 0;
}

.card
{
    width: 100px;
    height: 150px;
    border: 1px solid black;
    border-radius: 8px;
    background: White;
    color: White;
    margin: 0 0 -130px 0;
    padding: 5px;
}

// JS
var vm = {
    Cards: ko.observableArray([
        { Name: "Red", Color: "#f00" },
        { Name: "Green", Color: "#0f0" },
        { Name: "Blue", Color: "#00f" },
    ])
};

ko.applyBindings(vm);
4

3 回答 3

5

我也为闪烁的可排序而苦苦挣扎。请注意,它仅在 2 个条件下闪烁:

  1. 有一个connectWith选项正在使用
  2. 父容器(在我的例子中是<ul>标签)有一个高度或其他任何东西,比如<div style="clear:both">强制它有一个高度。

另一方面,如果连接的 UL 没有高度,我们实际上不能在其中放置任何东西。但每当 UL 获得高度时,它就会闪烁。所以我只设置了 10px 的高度,它就起作用了。如果这不起作用,请尝试在 UL 的父级上使用 overflow: visible 或 overflow: hidden 。希望能帮助到你。

更新:

如果有超过一行的项目,它将不起作用。我可以通过这样做来修复它:

结束:函数(事件,用户界面){$('#my_sortable_list').css('溢出','可见'); }

进而

停止:function() { $('.selector_for_all_sortable_lists').css('overflow', 'hidden'); }

在两个连接列表上

于 2012-11-28T17:58:55.003 回答
2

在我的实际情况中,答案是使用overflow: visible而不是负边距来获得重叠效果。

这神奇地使一切正常!

于 2012-05-18T00:35:30.187 回答
1

首先,你有一个逃跑的争论。

sortable: { data: Cards, 
    options: { placeholder: 'card', cursorAt: { left: 5, top: 5 }, }
    ,tolerance: 'pointer'}

容差应该在选项数组内,因此不会被拾取:) 即。

sortable: { 
    data: Cards, 
    options: { 
        placeholder: 'card', 
        cursorAt: { left: 5, top: 5 },
        tolerance: 'pointer'
    }
}

关于闪烁,在我看来,我喜欢它,因为事件正在通过元素(重叠)冒泡。尝试想出一种方法来确保它们只有在它们打算被排序时才会被排序:)

编辑:这个问题看起来很相似:处理重叠的 jQuery 可排序列表

于 2012-05-17T23:45:33.220 回答