100x100px の div がいくつかあります。
3 つのブロックの HTML コード:
<div id="plane">
<div class="tile tile3" block-id="1" style-id="3" style="left:50px; top:50px"></div>
<div class="tile tile1" block-id="2" style-id="1" style="left:150px; top:50px"></div>
<div class="tile tile3" block-id="3" style-id="3" style="left:250px; top:50px"></div>
</div>
ss
div をクリックすると、クリックした div/block を黄色にするというクラスを追加します。私はこれを次のコードで動作させています:
el.innerHTML = html.join('');
$(el).find('.tile').click(function () {
var clickedBlock = $(this);
clickedBlock.addClass('ss');
});
問題は、クリックしたブロック (div) にのみクラスを追加し、ss
少なくとも 1 つの側面 (左または右) を解放したいことです。他のブロックが付かないように。スクリーンショットの場合、緑色のブロックは片面が透明なのでss
、クリックするとクラスを取得できるはずです。赤いものには自由な面がないので、クリックしてもクラスは追加されません。
私はインターネットで解決策を検索し、いくつかのものを読んで、offset
これtypeof
を使用できると考えました。要するに、ブロックをクリックして、それを取得し、同じ(左側の場合)およびstyle left
右側のtop
div があるかどうかを確認します。あれば真を返す。片側が true または両側が false を返す場合 (左右にブロックがない場合)、ブロックは「フリー」であり、クリックされたブロックにクラスを追加する必要があります。style left -100
+100
top = 0
ss
私はこのコードを試しました(成功しませんでした):
el.innerHTML = html.join('');
$(el).find('.tile').click(function () {
var clickedBlock = $(this);
var offset = $(this).offset(); //get the top and left px
if (typeof clickedBlock[offset.left-100][offset.top=clickedBlock.attr('top')] == 'true') { //check the left side
if (typeof clickedBlock[offset.left+100][offset.top=clickedBlock.attr('top')] == 'false') { //check the right side
clickedBlock.addClass('ss');
}
} else { //if left side is already false, it really doesn't matter if the right side is clear or not since 1 side needs to be clear
clickedBlock.addClass('ss');
}
});
私の質問: これを機能させるにはどうすればよいですか? これはこれを行うための最良のアプローチですか、それともより良い方法がありますか? もしそうなら、どれですか?
また、次のオプションも可能です。
この HTML コードは次のとおりです。
<div id="plane">
<div class="tile tile3" block-id="1" style-id="3" style="left:50px; top:50px"></div>
<div class="tile tile1" block-id="2" style-id="1" style="left:150px; top:100px"></div>
<div class="tile tile2" block-id="3" style-id="2" style="left:50px; top:150px"></div>
<div class="tile tile3" block-id="4" style-id="3" style="left:250px; top:150px"></div>
</div>
ここでは、緑と青のブロックが「無料」です。したがって、この場合、left-100
と、 、 、、でdivもチェックするようにコードを調整する必要があります。つまり、合計 6 つのチェック (左に 3 つ、右に 3 つ)top-50
left-100
top+50
left+100
top-50
left+100
top+50
結論として、(クリック時に)片側(または両方)が空いている場合は、ss
クラスを追加します。私の質問が明確で、誰かが助けてくれることを願っています。
敬具