2011-11-10 142 views
9

基于http://jqueryui.com/demos/sortable/#placeholder我正在研究一个拖放界面,允许用户重新组织嵌套列表。正如你可以从the link看到的,这对于简单的列表很有用。Jquery拖放嵌套列表 - 如何最小化/去除闪烁

但是,当我使用嵌套列表尝试它时,发现闪烁不佳。在亲身体验:

http://jsfiddle.net/unklefolk/G5xPE/

移动一些内部项目外列表后反之亦然,你会看到,有相当多的闪烁/抖动发生,特别是围绕点外列表会和内部列表。

我该怎么做才能最大限度地减少这种闪烁?是否有任何改变jQuery或CSS,我可以做到这将减少这个问题?

回答

6

看看这个嵌套排序插件。这是列表项驱动的,但它可能是您的问题的答案。

nestedSortable jQuery Plugin

+0

伟大的链接布赖恩。这个插件看起来更像我需要的东西。希望我在几个月前发现了这个。我可能无法使用这个解决方案,因为我的jQuery UI路由很差,时间有限,但是我将奖励这个答案作为赏金,因为它似乎是遇到此问题的其他SO用户的最佳解决方案。 –

0

我曾经有过类似的问题,我没有时间适应它,但这里是我的解决方案。

使用JS回调:

$(document).ready(function() { 
    var s = $("#sortable"); 
    s.sortable({ 
     tolerance: 'pointer', 
     stop: function(event, ui) { 
      var ranks = ['gold','silver','bronze']; 
      $("li",s).each(function (idx) { 
       for(var i = 0; i < ranks.length; ++i) $(this).removeClass(ranks[i]); 
       $(this).addClass(ranks[idx]); 
      }); 
     } 
    }); 
}); 

你可以看到它here in jsfiddle.net

+0

感谢您的提示,凯尔。不幸的是,我已经把你的小提琴扩展到了嵌套列表,并且当我在两个关卡之间移动时仍然闪烁。 http://jsfiddle.net/unklefolk/uueFC/不知道如果我错过了什么? –

+0

你提供的小提琴没有嵌套列表:) – Kyle

+0

道歉。试试这个:http://jsfiddle.net/unklefolk/uueFC/3/恐怕我已经失去了漂亮的巧克力棒图像,但我认为它本质上是一样的。 –

1

我通常使用helper: 'clone'至极,对这个问题有一定影响(永远无法理解为什么)。我不知道,如果它的工作原理,在我的Firefox 8看起来更好

$(function() { 
    $(".sortable").sortable({ 
     placeholder: "ui-state-highlight", 
     connectWith: ".sortable", 
     helper: 'clone' 
    }); 
    $(".sortable").disableSelection(); 
}); 

http://jsfiddle.net/nicolapeluchetti/G5xPE/17/

+0

感谢您的回答,Nicola。似乎没有太多的影响我的实施,但希望这会帮助别人。 –

0

OP在这里。只是想发布我最终做了什么来解决这个问题。基于http://bugs.jqueryui.com/ticket/4741?cversion=0&cnum_hist=8取消注释在jQuery的UI的1.8.6.js以下行:

&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container 

我还是用connectWith属性。

我现在可以在层次结构中的层级之间进行拖放,而不闪烁。希望这有助于其他SO用户。