我目前正在开发一个功能,我需要同时结合可放置、可拖动和可排序的功能。下面是我的测试代码。很抱歉,我无法为这段代码获取 jsfiddle。Droppable 和 Draggable 工作正常。
问题:我很难在可放置的 div 中进行水平排序。如果有人可以帮助/指导我将其与排序列表中元素的索引/位置一起获取,我将不胜感激,无论该元素位于第 1、第 2 等位置。
HTML:
<ul id="gallery" class="gallery ui-helper-reset ui-helper-clearfix">
<li class="ui-widget-content ui-corner-tr">
<div class="ui-widget-header">High Tatras 1</div>
</li>
<li class="ui-widget-content ui-corner-tr">
<div class="ui-widget-header">High Tatras 2</div>
</li>
<li class="ui-widget-content ui-corner-tr">
<div class="ui-widget-header">High Tatras 3</div>
</li>
<li class="ui-widget-content ui-corner-tr">
<div class="ui-widget-header">High Tatras 4</div>
</li>
</ul>
<div id="trash" class="ui-widget-content ui-state-default">
<ul id = "sortable" class='gallery ui-helper-reset sortable'></ul>
</div>
以上是我用作测试数据的 HTML 代码。
JQuery:下面是我目前使用的 Jquery 代码。
var $gallery = $( "#gallery" ),
$trash = $( "#trash" );
// let the gallery items be draggable
$( "li", $gallery ).draggable({
cancel: "a.ui-icon", // clicking an icon won't initiate dragging
revert: "invalid", // when not dropped, the item will revert back to its initial position
containment: "document",
helper: "clone",
cursor: "move"
});
// let the trash be droppable, accepting the gallery items
$trash.droppable({
accept: "#gallery > li",
activeClass: "ui-state-highlight",
drop: function( event, ui ) {
addToContainer( ui.draggable );
}
});
// let the gallery be droppable as well, accepting items from the trash
$gallery.droppable({
accept: "#trash li",
activeClass: "custom-state-active",
drop: function( event, ui ) {
RemoveFromContainer( ui.draggable );
}
});
function addToContainer( $item ) {
$item.fadeOut(function() {
var $list = $( "ul", $trash );
$item.appendTo($list).fadeIn(function() {
$item
.addClass('ui-state-default')
.find( "div .ui-widget-header" )
.animate({ height: "36px"});
});
});
$( ".sortable" ).sortable({
connectWith: "#sortable"
}).disableSelection();
}
function RemoveFromContainer( $item ) {
$item.fadeOut(function() {
$item
.find( "a.ui-icon-refresh" )
.remove()
.end()
.css( "width", "96px")
.find( "img" )
.css( "height", "72px" )
.end()
.appendTo( $gallery )
.fadeIn();
});
}
// resolve the icons behavior with event delegation
$( "ul.gallery > li" ).click(function( event ) {
var $item = $( this ),
$target = $( event.target );
if ( $target.is( "a.ui-icon-trash" ) ) {
addToContainer( $item );
} else if ( $target.is( "a.ui-icon-refresh" ) ) {
RemoveFromContainer( $item );
}
return false;
});
如果我遗漏了什么并且未能发布正确的问题,请告诉我。我对stackoverflow进行了一些研究,但仍然找不到确切的解决方案。非常感谢您提前。