2011-11-10 28 views
9

Dựa trên http://jqueryui.com/demos/sortable/#placeholder Tôi đang làm việc trên giao diện kéo và thả cho phép người dùng sắp xếp lại danh sách lồng nhau. Như bạn có thể thấy từ the link, điều này hoạt động tốt trên các danh sách đơn giản.Kéo và thả Jquery trong danh sách lồng nhau - cách thu nhỏ/xóa hình nhấp nháy

Tuy nhiên, khi tôi thử nó với danh sách lồng nhau, tôi nhận được khá mờ nhấp nháy. Hãy thử nó cho chính mình tại địa chỉ:

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

Sau khi di chuyển một số mặt hàng nội vào danh sách bên ngoài và visa-versa bạn sẽ thấy rằng có khá nhiều bập bùng/dithering xảy ra, đặc biệt là xung quanh các điểm mà một bên ngoài danh sách đáp ứng và danh sách bên trong.

Tôi có thể làm gì để giảm thiểu sự nhấp nháy này? Có bất kỳ thay đổi nào đối với jQuery hoặc CSS mà tôi có thể thực hiện để làm giảm vấn đề này không?

Trả lời

6

Hãy nhìn vào Plugin sắp xếp được lồng nhau này. Đó là danh sách mục điều khiển, nhưng nó có thể là câu trả lời cho vấn đề của bạn.

nestedSortable jQuery Plugin

+0

Liên kết tuyệt vời Brian. Plugin này có vẻ giống như những gì tôi cần. Ước gì tôi đã tìm thấy điều này vài tháng trước. Tôi có thể không sử dụng giải pháp này vì tôi khá xa lộ trình jQuery UI và thời gian bị hạn chế nhưng tôi sẽ trả lời câu trả lời này vì nó có vẻ là giải pháp tốt nhất cho những người dùng SO khác gặp phải vấn đề này. –

0

Tôi đã có một vấn đề tương tự một lần trước đây, tôi không có thời gian để thích ứng với nó nhưng đây là giải pháp của tôi.

Sử dụng một callback 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]); 
      }); 
     } 
    }); 
}); 

Bạn có thể nhìn thấy nó here in jsfiddle.net

+0

Cảm ơn mẹo, Kyle. Thật không may, tôi đã lấy fiddle của bạn, mở rộng nó vào danh sách lồng nhau và vẫn nhận được nhấp nháy khi tôi di chuyển giữa các cấp. http://jsfiddle.net/unklefolk/uueFC/ Không chắc chắn nếu tôi đang thiếu một cái gì đó? –

+0

Fiddle bạn cung cấp không có danh sách lồng nhau :) – Kyle

+0

Xin lỗi. Hãy thử điều này: http://jsfiddle.net/unklefolk/uueFC/3/ Tôi sợ rằng tôi đã mất các hình ảnh thanh sô cô la đẹp nhưng tôi nghĩ rằng đó là bản chất giống nhau. –

1

Thông thường tôi sử dụng helper: 'clone' Mà có một số ảnh hưởng đến vấn đề này (không bao giờ hiểu tại sao) .i không biết nếu nó hoạt động, trên firefox 8 của tôi trông đẹp hơn

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

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

+0

Cảm ơn câu trả lời, Nicola. Dường như không có nhiều ảnh hưởng đến việc triển khai của tôi nhưng hy vọng điều này sẽ giúp người khác. –

0

OP tại đây. Chỉ muốn đăng những gì tôi cuối cùng đã làm để sửa lỗi này. Dựa trên http://bugs.jqueryui.com/ticket/4741?cversion=0&cnum_hist=8 tôi không chú thích dòng sau trong jquery-ui-1.8.6.js:

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

tôi vẫn sử dụng thuộc tính connectWith.

Tôi hiện có thể kéo và thả giữa các cấp trong cấu trúc phân cấp mà không bị nhấp nháy. Hy vọng điều này sẽ giúp người dùng SO khác.

Các vấn đề liên quan