如果您将可放置的 div 链接到输入,它会使生活变得更轻松,如下所示:
<div id='column_1_count' class='droppable_bucket' data-input='cat1'>
</div>
<div id='column_2_count' class='droppable_bucket' data-input='cat2'>
</div>
<div id='column_3_count' class='droppable_bucket' data-input='cat3'>
</div>
<div id='column_4_count' class='droppable_bucket' data-input='cat4'>
</div>
<div id='column_5_count' class='droppable_bucket' data-input='cat5'>
</div>
<div id='column_6_count' class='droppable_bucket' data-input='cat6'>
</div>
然后您可以执行以下操作:
$( ".droppable_category" ).draggable({ revert: "invalid" });
$( ".droppable_bucket" ).droppable({
activeClass: "ui-state-hover",
hoverClass: "ui-state-active",
drop: function( event, ui ) {
var currentHeight = $(this).height();
var relatedInput = $(this).data('input');
var catCount = parseInt($("#"+relatedInput).val(), 10);
$( this )
.addClass( "ui-state-highlight" )
.height(currentHeight+25);
$("#"+relatedInput).val(++catCount);
}
});
在这里拉小提琴。
编辑
根据您的评论,您需要更多的灵活性,在存储桶之间移动东西,动态跟踪东西被拖放的位置等等。
一起使用 sortable 和 draggable 会更有意义。
如果你有这样的 HTML:
<div id="fixedDiv">
<ul id="category">
<li class="droppable_category">name</li>
<li class="droppable_category">name</li>
<li class="droppable_category">name</li>
<li class="droppable_category">name</li>
<li class="droppable_category">name</li>
<li class="droppable_category">name</li>
</ul>
</div>
<div id="buckets">
<ul id='column_1_count' class='droppable_bucket' data-input='cat1'></ul>
<ul id='column_2_count' class='droppable_bucket' data-input='cat2'></ul>
<ul id='column_3_count' class='droppable_bucket' data-input='cat3'></ul>
<ul id='column_4_count' class='droppable_bucket' data-input='cat4'></ul>
<ul id='column_5_count' class='droppable_bucket' data-input='cat5'></ul>
<ul id='column_6_count' class='droppable_bucket' data-input='cat6'></ul>
<ul id='column_7_count' class='droppable_bucket' data-input='cat7'></ul>
</div>
你可以像这样创建 JavaScript:
$(function() {
var transferred = false;
$('.droppable_category').draggable({
connectToSortable: '.droppable_bucket',
helper: 'clone',
start: function(event, ui)
{
$(this).hide();
},
stop: function(event, ui)
{
if(!transferred)
$(this).show();
else
{
$(this).remove();
transferred = false;
}
}
});
$('.droppable_bucket').sortable({
connectWith: ".droppable_category, .droppable_bucket",
receive: function(event, ui)
{
transferred = true;
var targetInput = $(this).data('input');
var targetCatCount = parseInt($("#"+targetInput).val(), 10);
$("#"+targetInput).val(++targetCatCount);
if (ui.sender.hasClass("droppable_bucket")) {
var sourceInput = ui.sender.data('input');
var sourceCatCount = parseInt($("#"+sourceInput).val(), 10);
$("#"+sourceInput).val(--sourceCatCount);
}
}
});
$( "ul, li" ).disableSelection();
});
另一个小提琴在这里。