我有一些 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>
当我单击一个 div 时,我添加了一个名为的类ss
,它使单击的 div/block 变为黄色。我有这个使用以下代码:
el.innerHTML = html.join('');
$(el).find('.tile').click(function () {
var clickedBlock = $(this);
clickedBlock.addClass('ss');
});
问题是我只想将ss
类添加到我单击的块(div)中并且至少有一侧(左侧或右侧)空闲。这样就不会附加其他块。在屏幕截图的情况下,绿色块的一侧清晰,因此ss
单击时应该能够获得 te 类。红色的没有免费的一面,所以点击它时不应该添加任何课程。
我在互联网上搜索了一个解决方案并阅读了一些关于offset
并且typeof
认为我可以使用它的东西。简而言之:单击一个块,获取它style left
并top
检查周围是否有任何 div 相同style left -100
(左侧)和+100
右侧 where 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>
这里的绿色和蓝色块是“免费的”。因此,在这种情况下,我们需要调整代码以检查 div 与left-100
and top-50
, left-100
and top+50
, left+100
and top-50
, left+100
and top+50
。所以总共有 6 次检查(左边 3 次,右边 3 次)
所以总而言之:如果(点击时)一侧是免费的(或两者都是)添加ss
类。我希望我的问题很清楚,有人可以提供帮助。
亲切的问候