JavaScript宾果游戏如何禁止点击切换免费格子freespace的高亮状态
解决方案
只需要修改2处代码即可实现需求,无需额外手动调整样式:
1. 给免费格子添加专属标识与默认高亮
在动态生成免费格子的单元格时,直接追加专属类和默认高亮类,保证初始状态就是高亮的:
找到isFreeSpace判断分支内的生成代码,修改为:
} else if (isFreeSpace(words.length, index)) { // 加free-space类做标识,同时默认带highlight类保持初始高亮 tr+= '<td class="free-space highlight"><img src="images/paw.svg"></td>'; }
2. 调整点击事件逻辑,跳过免费格子的状态切换
因为你用了事件委托绑定点击事件,只需要在触发时判断是否点击了免费格子,是的话直接终止处理即可,同时兼容点击到格子内图片的场景:
将原有的点击事件逻辑修改为:
table.onclick = function(event) { // 向上查找最近的td节点,兼容点击到单元格内图片的情况 const targetTd = event.target.closest('td'); // 未找到有效单元格 或 是免费格子,直接不处理 if (!targetTd || targetTd.classList.contains('free-space')) return; highlight(targetTd); }; function highlight(td) { td.classList.toggle('highlight'); }
额外注意事项
你现有的isEndOfRow函数存在运算优先级错误,会导致行拆分逻辑异常,建议修改为:
function isEndOfRow(rowSize, index) { // 原来的index + 1 / rowSize 会先算除法再加index,逻辑错误 return Number.isInteger((index + 1) / rowSize); }
内容的提问来源于stack exchange,提问作者Marissa Pore
相关产品推荐
相关产品推荐

