ここで状況全体を示す jsFiddle をセットアップしました。赤い「ペグ」を右側の緑のボックスの1つにドラッグし、その上に別の赤いペグをドラッグすると、元に戻ったときに赤に戻ることを除いて、すべてが期待どおりに機能します左の箱に戻ります。
HTML:
<div id="box">
<div class="peg"> </div>
<div class="space"> </div>
<div class="peg"> </div>
<div class="space"> </div>
<div class="peg"> </div>
<div class="space"> </div>
<div class="peg"> </div>
</div>
<div id="game">
<ul class="row">
<li class="hole"> </li>
<li class="hole"> </li>
<li class="hole"> </li>
<li class="hole"> </li>
</ul>
<ul class="row">
<li class="hole"> </li>
<li class="hole"> </li>
<li class="hole"> </li>
<li class="hole"> </li>
</ul> </div>
Javascript:
$('.peg' ).draggable({
snap: ".hole",
snapMode: "inner",
snapTolerance: 40,
//scope: "zappa",
//revert: 'invalid',
stop: function(){
$(this).draggable('option','revert','invalid');
},
//helper: "clone"
});
$('.peg').droppable({
tolerance: 'fit'
});
$('.peg').droppable({
greedy: true,
tolerance: 'touch',
drop: function(event,ui){
ui.draggable.draggable('option','revert',true);
}
});
$('.hole').droppable({
drop: function(e,ui) {
$(ui.draggable).removeClass('peg').addClass('top');
},
//scope: "zappa"
});
$('#box').droppable({
drop: function(e,ui) {
$(ui.draggable).removeClass('top').addClass('peg');
},
//scope: "zappa"
});
CSS:
#game {
position: absolute;
width: 330px;
height: 400px;
top: 15px;
left: 135px;
background: wheat;
padding: 15px;
}
.row {
position: relative;
margin-left: auto;
margin-right: auto;
height: 75px;
margin-bottom: 15px;
background-color: olive;
}
.hole {
width: 75px;
height: 75px;
float: left;
background-color: aqua;
opacity: 0.3;
margin-left: 6px;
}
#box {
position: absolute;
left: 15px;
top: 15px;
width: 90px;
padding-bottom: 15px;
background-color: wheat;
padding-top: 15px;
padding-left: 15px;
}
.peg {
width: 75px;
height: 75px;
background-color: red;
z-index: 1;
}
.space {
height: 15px;
width: 75px;
}
.top {
background-color: blue;
width: 75px;
height: 75px;
z-index: 1;
}