如何通过jQuery UI排序来消除闪烁?

时间:2012-05-17 23:26:49

标签: jquery jquery-ui knockout.js jquery-ui-sortable knockout-sortable

我有一张可分类的扑克牌清单。为了显示牌的顶部,我给每张牌一个负底线。一旦我这样做,jQuery可排序变得非常闪烁并且难以使用。我怎样才能消除这个傻瓜呢? 在闪烁的顶部,我如何获得适当的垂直对齐拖动?看来我必须在列表的上方或下方行,才能将占位符移动到列表的那一边。

我已将我的代码放在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);

3 个答案:

答案 0 :(得分:5)

我也在挣扎着一个闪烁的可分类。注意到它只在2种情况下闪烁:

  1. 正在使用connectWith选项
  2. 父容器(在我的情况下,<ul>标签)有一个高度或其他任何类似<div style="clear:both">的强制它有一个高度。
  3. 另一方面,如果连接的UL没有高度,我们实际上不能丢弃其中的任何内容。但是只要UL达到高度,它就会闪烁。所以我把高度只有10px而且效果很好。如果这不起作用,请尝试使用overflow:visible或overflow:隐藏在UL的父级上。希望它有所帮助。

    更新:

    如果有多行商品,则无效。我可以通过这样做来解决这个问题:

    over:function(event,ui){$('#my_sortable_list')。css('overflow','visible'); }

    然后

    stop:function(){$('。selector_for_all_sortable_lists')。css('overflow','hidden'); }

    两个连接列表上的内容

答案 1 :(得分:2)

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

这神奇地使一切都有效!

答案 2 :(得分:0)

首先,你有一个失控的论点。

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'
    }
}

关于闪烁,在我看来它似乎是因为事件正在通过元素(重叠)冒泡。尝试并提出一种方法,确保它们只有在以下情况下才能进行排序:)

编辑:此问题似乎相似:Dealing with overlapping jQuery sortable lists