【问题标题】:How can I elminate flicker with jQuery UI sortable?如何使用可排序的 jQuery UI 消除闪烁?
【发布时间】:2012-05-25 13:36:09
【问题描述】:

我有一个可排序的扑克牌列表。为了只显示卡片的顶部,我为每张卡片设置了一个负的底部边距。一旦我这样做了,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);

【问题讨论】:

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


    【解决方案1】:

    我也为闪烁的排序而苦苦挣扎。注意到它只在 2 种情况下闪烁:

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

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

    更新:

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

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

    然后

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

    两个连接列表上的那个

    【讨论】:

      【解决方案2】:

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

      这神奇地使一切正常!

      【讨论】:

      • 啊,太酷了,很高兴你能成功 :D 并感谢你告诉我你是如何解决它的 :)
      【解决方案3】:

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

      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

      【讨论】:

      • 谢谢,这实际上解决了第二个问题,但不是第一个问题。知道如何停止闪烁吗?
      • 是的,我能够使用 overflow: visible 而不是负边距来消除重叠。
      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 2012-04-09
      相关资源
      最近更新 更多