sortable example ejemplos drop container and jquery jquery-ui jquery-ui-sortable jquery-ui-droppable

example - jQuery UI Droppable and Sortable-colocando en la ubicación de ordenación correcta



sortable jquery ejemplos (2)

¿Qué hay de hacer esto? El uso de las dos opciones connectToSortable AND connectWith funciona, creo. Puede haber una forma más inteligente de ocultar / mostrar el marcador de posición, pero esto definitivamente funciona.

$(function () { $("#catalog").accordion(); $("#catalog li").draggable({ appendTo: "body", helper: "clone", connectToSortable: "#cart ol" }); $("#cart ol").sortable({ items: "li:not(.placeholder)", connectWith: "li", sort: function () { $(this).removeClass("ui-state-default"); }, over: function () { //hides the placeholder when the item is over the sortable $(".placeholder").hide(); }, out: function () { if ($(this).children(":not(.placeholder)").length == 0) { //shows the placeholder again if there are no items in the list $(".placeholder").show(); } } }); });

Demo de trabajo en Fiddle

Estoy trabajando en un proyecto en el que arrastro elementos de un control jQuery de terceros a un jQuery clasificable, utilizando una combinación de dropable y clasificable.

Esto funciona perfectamente bien, excepto que el elemento que se agrega siempre se agrega al final de la lista de ordenación, y luego debe moverlo a la ubicación correcta como un paso separado.

¿Es posible agregar el elemento a la ubicación donde lo colocó en la lista?

Puede ver este comportamiento en la demo descargable de la tarjeta de compras jQuery desde here . Aquí hay un jsfiddle del mismo código. A medida que agrega artículos de los productos a su carrito en la parte inferior, siempre se agrega en la parte inferior, incluso si lo coloca cerca de la parte superior.

Aquí está el código jQuery:

$(function () { $("#catalog").accordion(); $("#catalog li").draggable({ appendTo: "body", helper: "clone" }); $("#cart ol").droppable({ activeClass: "ui-state-default", hoverClass: "ui-state-hover", accept: ":not(.ui-sortable-helper)", drop: function (event, ui) { $(this).find(".placeholder").remove(); $("<li></li>").text(ui.draggable.text()).appendTo(this); } }).sortable({ items: "li:not(.placeholder)", sort: function () { $(this).removeClass("ui-state-default"); } }); });


use la callback de callback del evento droppable''s drop para comparar la posición current top offset position of the draggable helper con el top offset de cada elemento ya presente o agregado previamente en el droppable

drop: function (event, ui) { if($(this).find(".placeholder").length>0) //add first element when cart is empty { $(this).find(".placeholder").remove(); $("<li></li>").text(ui.draggable.text()).appendTo(this); } else { var i=0; //used as flag to find out if element added or not $(this).children(''li'').each(function() { if($(this).offset().top>=ui.offset.top) //compare { $("<li></li>").text(ui.draggable.text()).insertBefore($(this)); i=1; return false; //break loop } }) if(i!=1) //if element dropped at the end of cart { $("<li></li>").text(ui.draggable.text()).appendTo(this); } } }

DEMO CON CÓDIGO

DEMO DE PANTALLA COMPLETA