jquery の学習を開始するために、ドラッグ アンド ドロップ ゲームを作成しました。すべてが機能しているように見えますが、同じ正方形に複数のアイテムをドロップできます. プレースホルダーに画像がある場合、ドロップ可能を無効にしたい。
私は調べました:
`greedy: true`
これによりドロップが無効になりますが、再度有効にする方法がわかりません。
$(this).droppable( 'disable' );
これらの両方を取得してドロップを無効にすることはできますが、ブロック/画像が元の位置に戻るか、別の正方形に移動された場合に、ドロップを再び有効にする方法がわかりません。
フルバージョン: http://creativelabel.co.uk/drag-and-drop/
更新: これはドロップ可能なスロットのコードです。
for ( var i=0; i<=19; i++ ) {
var images = 'images/slot' + slotNumbers[i] + '.jpg';
$('<div class="placeholder"><div class="img-slot"></div></div>').attr('id', 'slot'+slotNumbers[i]).data( 'slotNumbers', slotNumbers[i] ).appendTo( '#imgSlots' ).droppable( {
accept: '#images img',
hoverClass: 'hovered',
drop: handleDropEvent,
activate: handleDragEvent
});
これはdrop:
イベント コードです。
function handleDropEvent( event, ui ) {
var slotNumber = $(this).data( 'slotNumbers' );
var imgNumber = ui.draggable.data( 'number' );
ui.draggable.addClass( 'dropped' );
$(this).droppable( 'disable' );
ui.draggable.position( { of: $(this), my: 'right top', at: 'right top' } );
if ( slotNumber == imgNumber ) {
ui.draggable.addClass( 'img-match' );
ui.draggable.data("valid", true);
imgMatch++;
} else {
if(ui.draggable.data("valid")) {
imgMatch--;
ui.draggable.data("valid", false);
}
}
activate:
コード:
function handleDragEvent( event, ui ) {
$(this).droppable( 'enable' );
if(ui.draggable.data("valid")) {
imgMatch--;
$('input[name=Score]').val(imgMatch);
$('#score h1').text(imgMatch);
ui.draggable.data("valid", false);
}
}