用JS实现一个效果
点击 “变色” 按钮后,棋盘内相邻的格子颜色互换,红色变成黑色,黑色变成红色
修改后:
你的代码中,点击按钮后会根据index的值来判断当前要变成哪种颜色的棋盘。如果index是偶数,就将偶数索引位置的格子变成红色,奇数索引位置的格子变成黑色;如果index是奇数,就将偶数索引位置的格子变成黑色,奇数索引位置的格子变成红色。
修改后的代码段中,点击按钮后会遍历所有的格子,如果格子的背景颜色是红色,则将其变成黑色,反之如果是黑色,则将其变成红色。该代码段没有使用index来控制具体变换的颜色,而是根据格子原本的颜色来进行切换。
<!DOCTYPE html>
<html>
<head>
<title>棋盘变色</title>
<style type="text/css">
body {
margin: 0;
padding: 0;
}
#box {
width: 400px;
height: 400px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -200px;
margin-top: -200px;
border: 1px solid black;
}
#box > div {
width: 20px;
height: 20px;
float: left;
}
#Btn {
width: 80px;
height: 30px;
font-size: 15px;
letter-spacing: 1px;
position: absolute;
top: 40%;
left: 30%;
}
</style>
</head>
<body>
<div id="box"></div>
<input type="button" name="colorBtn" id="Btn" value="变色">
<script type="text/javascript">
var oBox = document.getElementById('box');
var index = 0;
for (var i = 0; i < 400; i++) {
var oDiv = document.createElement('div');
oBox.appendChild(oDiv);
if (Math.floor(i / 20) % 2 == 0) {
if (i % 2 == 0) {
oDiv.style.background = 'red';
} else {
oDiv.style.background = 'black';
}
} else {
if (i % 2 == 0) {
oDiv.style.background = 'black';
} else {
oDiv.style.background = 'red';
}
}
}
var colorBtn = document.getElementById("Btn");
colorBtn.onclick = function() {
index++;
var allDiv = oBox.getElementsByTagName('div');
for (var a = 0; a < allDiv.length; a++) {
if (allDiv[a].style.background == 'red') {
allDiv[a].style.background = 'black';
} else {
allDiv[a].style.background = 'red';
}
}
};
</script>
</body>
</html>
【以下回答由 GPT 生成】
要实现棋盘格子颜色互换的效果,可以根据点击事件来改变相邻格子的颜色。
以下是一个可能的解决方案:
以下是一个示例代码来实现该效果:
<!DOCTYPE html>
<html>
<head>
<style>
.box {
display: flex;
flex-wrap: wrap;
width: 400px; /* 棋盘宽度 */
}
.box div {
width: 20px; /* 格子宽度 */
height: 20px; /* 格子高度 */
}
.red {
background-color: red; /* 红色 */
}
.black {
background-color: black; /* 黑色 */
}
</style>
</head>
<body>
<div id="oBox" class="box"></div>
<button id="changeColorBtn">变色</button>
<script>
// 创建格子元素
function createGridElements() {
var oBox = document.getElementById('oBox');
for (var i = 0; i < 400; i++) {
var oGrid = document.createElement('div');
oGrid.classList.add('black');
oBox.appendChild(oGrid);
}
}
// 更新格子颜色
function updateGridColor() {
var oBox = document.getElementById('oBox');
var oGrids = oBox.getElementsByTagName('div');
for (var i = 0; i < oGrids.length; i++) {
var oGrid = oGrids[i];
var bgColor = oGrid.classList.contains('red') ? 'black' : 'red';
oGrid.className = bgColor;
}
}
// 点击事件处理程序
function handleClickEvent() {
updateGridColor();
}
// 添加点击事件监听器
var changeColorBtn = document.getElementById('changeColorBtn');
changeColorBtn.addEventListener('click', handleClickEvent);
// 初始化棋盘
createGridElements();
</script>
</body>
</html>
以上代码将创建一个棋盘,其中的格子都为黑色。当点击 "变色" 按钮时,格子的颜色会互相变换(红色变黑色,黑色变红色)。
结合GPT给出回答如下请题主参考
首先需要对棋盘格子进行编号,可以使用一个二维数组存储每个格子的颜色和编号。然后定义一个函数来交换相邻格子的颜色,并使用addEventListener()函数将该函数绑定在“变色”按钮上,实现点击按钮后颜色互换的效果。
以下是一个示例代码:
HTML代码:
<div id="chessboard"></div>
<button id="btn">变色</button>
CSS代码:
#chessboard {
width: 200px;
height: 200px;
}
.cell {
display: inline-block;
width: 20px;
height: 20px;
border: 1px solid black;
}
.red {
background-color: red;
}
.black {
background-color: black;
}
JavaScript代码:
var board = document.getElementById("chessboard");
var chessboard = [];
var rowNum = 10;
var colNum = 10;
// 初始化棋盘格子
for (var i = 0; i < rowNum; i++) {
chessboard[i] = [];
for (var j = 0; j < colNum; j++) {
var cell = document.createElement("div");
cell.className = "cell";
if ((i + j) % 2 === 0) {
cell.classList.add("red");
chessboard[i][j] = {
color: "red",
id: i * colNum + j,
};
} else {
cell.classList.add("black");
chessboard[i][j] = {
color: "black",
id: i * colNum + j,
};
}
board.appendChild(cell);
}
}
var btn = document.getElementById("btn");
btn.addEventListener("click", changeColor);
// 交换相邻格子的颜色
function changeColor() {
for (var i = 0; i < rowNum; i++) {
for (var j = 0; j < colNum; j++) {
if (j < colNum - 1) {
var temp = chessboard[i][j].color;
chessboard[i][j].color = chessboard[i][j + 1].color;
chessboard[i][j + 1].color = temp;
var cell1 = document.getElementById(chessboard[i][j].id);
var cell2 = document.getElementById(chessboard[i][j + 1].id);
cell1.classList.replace(temp, chessboard[i][j].color);
cell2.classList.replace(chessboard[i][j + 1].color, temp);
}
}
}
}
此代码会生成一个棋盘,初始情况下相邻格子颜色不同。点击“变色”按钮后,相邻格子的颜色会交换。
<!DOCTYPE html>
<html>
<head>
<title>棋盘变色</title>
<style type="text/css">
body {
margin: 0;
padding: 0;
}
#box {
width: 400px;
height: 400px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -200px;
margin-top: -200px;
border: 1px solid black;
}
#box > div {
width: 20px;
height: 20px;
float: left;
}
#Btn {
width: 80px;
height: 30px;
font-size: 15px;
letter-spacing: 1px;
position: absolute;
top: 40%;
left: 30%;
}
</style>
</head>
<body>
<div id="box"></div>
<input type="button" name="colorBtn" id="Btn" value="变色">
<script type="text/javascript">
var oBox = document.getElementById('box');
var index = 0;
for (var i = 0; i < 400; i++) {
var oDiv = document.createElement('div');
oBox.appendChild(oDiv);
if (Math.floor(i / 20) % 2 == 0) {
if (i % 2 == 0) {
oDiv.style.background = 'red';
} else {
oDiv.style.background = 'black';
}
} else {
if (i % 2 == 0) {
oDiv.style.background = 'black';
} else {
oDiv.style.background = 'red';
}
}
}
var colorBtn = document.getElementById("Btn");
colorBtn.onclick = function() {
index++;
var allDiv = oBox.getElementsByTagName('div');
for (var a = 0; a < allDiv.length; a++) {
if (allDiv[a].style.background == 'red') {
allDiv[a].style.background = 'black';
} else {
allDiv[a].style.background = 'red';
}
}
};
</script>
</body>
</html>
引用 皆我百晓生 小程序回复内容作答:
可以使用事件委托的方式来处理点击事件,即给棋盘容器添加一个点击事件监听器,当点击的目标元素是棋盘格子时,执行颜色互换的操作。
首先,可以给每个格子设置一个data属性,来标记格子的颜色状态。例如,红色的格子可以设置data-color属性为"red",黑色的格子可以设置data-color属性为"black"。
在点击事件监听器中,首先判断点击的目标元素是不是格子元素,可以通过目标元素的tagName来判断。然后,根据目标元素的data-color属性的值,来执行红色和黑色的互换操作。
下面是一个示例的代码:
HTML:
<div id="chessboard"></div>
<button id="change-color">变色</button>
CSS:
#chessboard {
width: 400px;
height: 400px;
display: flex;
flex-wrap: wrap;
}
.cell {
width: 20%;
height: 20%;
}
.red {
background-color: red;
}
.black {
background-color: black;
}
JavaScript:
var chessboard = document.getElementById('chessboard');
var changeColorButton = document.getElementById('change-color');
var cells = [];
// 创建格子元素
for (var i = 0; i < 400; i++) {
var cell = document.createElement('div');
cell.classList.add('cell');
cell.dataset.color = 'red'; // 初始化为红色
cells.push(cell);
chessboard.appendChild(cell);
}
// 点击事件监听器
chessboard.addEventListener('click', function(event) {
var target = event.target;
// 判断点击的目标元素是格子元素
if (target.tagName === 'DIV' && target.classList.contains('cell')) {
// 切换红色和黑色
if (target.dataset.color === 'red') {
target.dataset.color = 'black';
target.style.backgroundColor = 'black';
} else {
target.dataset.color = 'red';
target.style.backgroundColor = 'red';
}
}
});
// 点击按钮执行颜色互换
changeColorButton.addEventListener('click', function() {
for (var i = 0; i < cells.length; i++) {
var cell = cells[i];
// 切换红色和黑色
if (cell.dataset.color === 'red') {
cell.dataset.color = 'black';
cell.style.backgroundColor = 'black';
} else {
cell.dataset.color = 'red';
cell.style.backgroundColor = 'red';
}
}
});
这样点击按钮或者点击棋盘格子,都可以实现颜色互换的效果。
提供参考实例,链接:https://blog.51cto.com/harmonyos/5615543
如果是偶数个列:遍历每一行,将每一行中的相邻单元格交换颜色。
如果是奇数个列:也是遍历每一行,但是是奇数列,所以最后一列一定不会交换,最后一列可以这样处理,当所有行处理完毕之后,针对最后一列所有单元格,进行列方向的颜色交换。
用行列的奇偶性就可以判断就可以实现变色