【问题标题】:How to make grid squares change color?如何使网格方块改变颜色?
【发布时间】:2021-08-10 08:04:37
【问题描述】:

我仍然是初学者,我正在尝试了解如何更改我的 etch-a-sketch 项目的网格颜色。一些指导会很棒。

我可以让页面的背景改变颜色,我也可以让网格边框改变颜色,但不是网格之间的空间口袋。我也无法锻炼如何留下痕迹。 Css 只允许动画和悬停,不会留下永久的痕迹。所以,我知道一个存储值的函数。

有人可以突出显示我的代码的哪一部分是错误的,为什么它是错误的,如果你有一个我可以阅读的在线资源,这样我就可以创建在每个网格中留下痕迹和改变颜色的功能永远心存感激。

这是我的代码:

//first div
let container = document.createElement('div')
container.setAttribute('id', 'container');
container.classList.add("grid");
document.body.appendChild(container);



//second div

let containerGrid = document.createElement('div')
containerGrid.setAttribute('id', 'containerGrid');
containerGrid.classList.add("grids");
document.body.appendChild(containerGrid);

//button div
let buttonDiv = document.createElement('div')
buttonDiv.setAttribute('id', 'button');
buttonDiv.classList.add("button");
document.body.appendChild(buttonDiv);


//buttons//

const eraserButton = document.createElement('button');
eraserButton.textContent ="Eraser";
eraserButton.classList.add ("Eraser")
eraserButton.setAttribute('id', 'Eraser');
const clearButton = document.createElement('button');
clearButton.classList.add ("Clear")

clearButton.setAttribute('id', 'Clear');
clearButton.textContent ="Clear";

buttonDiv.appendChild(eraserButton);
buttonDiv.appendChild(clearButton);

//hover color event

function random (number) {
  return Math.floor(Math.random() * (number +1));
}

const input = document.querySelectorAll('#col');

function rainbowColor () {
    const rndCol= 'rgb(' + random(255) + ',' + random(255) +',' + random (255) + ')';
containerGrid.col.style.BackgroundColor = rndCol;

}

input.onmouseover = (rainbowColor);

/*
const inputOne = document.querySelector('#color-picker');
inputOne.addEventListener('mouseover', e => {
    e.target.classList.add = ('color-picker');

});


const inputTwo = document.querySelector('#black-pick');
inputTwo.addEventListener('mouseover', e =>  {
    e.target.classList.add = ('black-pick');
});
*/
const btn = document.querySelector('#Eraser');
btn.addEventListener('click', function (e) {
    console.log(e);
});

const btnTwo = document.querySelector('#Clear');
btn.addEventListener('click', function (e) {
   console.log(e);
});

//make grid 16*16

function makeCols (col) {
    for (let i = 0; i < 16; i++) {
        const colDivs = document.createElement('div');
        colDivs.setAttribute('id', 'col');
        colDivs.classList.add('cols');
        colDivs.textContent ="";
        colDivs.style.border = ('solid');
        colDivs.style.display= ('grid');
        colDivs.style.padding = ('5px');
        containerGrid.appendChild(colDivs);
    }
}
makeCols (16);

function makeRows (rows) {
    for (let j = 0; j < 16; j++) {
        const rowDivs = document.createElement('div');
        rowDivs.setAttribute('id', 'rows');
        rowDivs.classList.add('rows');
        rowDivs.style.border = ('solid');
        rowDivs.style.display= ('grid');
        rowDivs.style.padding = ('5px');
               containerGrid.appendChild(rowDivs);
    }
}
makeCols (16);
makeRows(16);
.grid {

width:500px;

}

.grids {

    display: grid;
    justify-content:center;
    align-items:center;
    grid-template-columns: repeat(8,1fr);
    grid-auto-rows:repeat(8, 1fr);
    padding: 50px 50px;
    margin-left:150px;
    height:100px;
    width:200px;
 }

.rows {
    height:10px;
    width:10px;
    grid-column-gap:10px;

}
.cols {
    height:10px;
    width:10px;
}

.palette.cols:hover {
   background-color:rrggbb; 
}


.col {
    background-color:black;
}

.rows {
    background-color: red, black, blue, yellow, purple, green;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Etch-a-Sketch</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

    <div id ="color-picker" class = "palette">
        <input type="color" name="Rainbow" id="rainbow-colors" value= "#e66465">
        <label for="Rainbow">Rainbow</label>
    </div>
        
    <div id = "black-pick" class = "black-color">
        <input type="color" name="Black" id="black-color" value="#rrggbb">
        <label for="Black">Black</label>
    </div>
    <script src="app.js"></script>
</body>
</html>

【问题讨论】:

  • 现在对每个元素使用相同的 ID。 IDs 属性应该对每个元素都是唯一的。给他们唯一的 ID:'col' + i'rows' + j'row' + j

标签: javascript html css


【解决方案1】:

几个步骤即可修复

  1. 在您创建 HTML 元素之后分配onmouseover
  2. onmouseover处理程序中,使用事件参数获取元素
  3. 背景颜色有误,backgroundColor,首字母小写
  4. 我使 ID 独一无二
  5. 我将您的鼠标悬停处理程序的选择器更改为.cols
  6. 循环遍历找到的元素并分配 onmouseover 处理程序

有关其他内容,请参阅下面的 sn-p。

//first div
let container = document.createElement('div')
container.setAttribute('id', 'container');
container.classList.add("grid");
document.body.appendChild(container);



//second div

let containerGrid = document.createElement('div')
containerGrid.setAttribute('id', 'containerGrid');
containerGrid.classList.add("grids");
document.body.appendChild(containerGrid);

//button div
let buttonDiv = document.createElement('div')
buttonDiv.setAttribute('id', 'button');
buttonDiv.classList.add("button");
document.body.appendChild(buttonDiv);


//buttons//

const eraserButton = document.createElement('button');
eraserButton.textContent ="Eraser";
eraserButton.classList.add ("Eraser")
eraserButton.setAttribute('id', 'Eraser');
const clearButton = document.createElement('button');
clearButton.classList.add ("Clear")

clearButton.setAttribute('id', 'Clear');
clearButton.textContent ="Clear";

buttonDiv.appendChild(eraserButton);
buttonDiv.appendChild(clearButton);

//hover color event

function random (number) {
  return Math.floor(Math.random() * (number +1));
}

function rainbowColor (e) {
    const rndCol= 'rgb(' + random(255) + ',' + random(255) +',' + random(255) + ')';
    e.target.style.backgroundColor = rndCol;
}

/*
const inputOne = document.querySelector('#color-picker');
inputOne.addEventListener('mouseover', e => {
    e.target.classList.add = ('color-picker');

});


const inputTwo = document.querySelector('#black-pick');
inputTwo.addEventListener('mouseover', e =>  {
    e.target.classList.add = ('black-pick');
});
*/
const btn = document.querySelector('#Eraser');
btn.addEventListener('click', function (e) {
    console.log(e);
});

const btnTwo = document.querySelector('#Clear');
btn.addEventListener('click', function (e) {
   console.log(e);
});

//make grid 16*16

function makeCols (col) {
    for (let i = 0; i < 16; i++) {
        const colDivs = document.createElement('div');
        colDivs.setAttribute('id', 'col' + i);
        colDivs.classList.add('cols');
        colDivs.textContent ="";
        colDivs.style.border = ('solid');
        colDivs.style.display= ('grid');
        colDivs.style.padding = ('5px');
        containerGrid.appendChild(colDivs);
    }
}
makeCols (16);

function makeRows (rows) {
    for (let j = 0; j < 16; j++) {
        const rowDivs = document.createElement('div');
        rowDivs.setAttribute('id', 'row' + j);
        rowDivs.classList.add('rows');
        rowDivs.style.border = ('solid');
        rowDivs.style.display= ('grid');
        rowDivs.style.padding = ('5px');
               containerGrid.appendChild(rowDivs);
    }
}

makeCols(16);
makeRows(16);

var inputs = document.querySelectorAll('.cols');
for(var k=0; k<inputs.length; k++) {
    inputs[k].onmouseover = rainbowColor;
}
.grid {

width:500px;

}

.grids {

    display: grid;
    justify-content:center;
    align-items:center;
    grid-template-columns: repeat(8,1fr);
    grid-auto-rows:repeat(8, 1fr);
    padding: 50px 50px;
    margin-left:150px;
    height:100px;
    width:200px;
 }

.rows {
    height:10px;
    width:10px;
    grid-column-gap:10px;

}
.cols {
    height:10px;
    width:10px;
}

.palette.cols:hover {
   background-color:rrggbb; 
}


.col {
    background-color:black;
}

.rows {
    background-color: red, black, blue, yellow, purple, green;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Etch-a-Sketch</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>

    <div id ="color-picker" class = "palette">
        <input type="color" name="Rainbow" id="rainbow-colors" value= "#e66465">
        <label for="Rainbow">Rainbow</label>
    </div>
        
    <div id = "black-pick" class = "black-color">
        <input type="color" name="Black" id="black-color" value="#rrggbb">
        <label for="Black">Black</label>
    </div>
    <script src="app.js"></script>
</body>
</html>

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 1970-01-01
    相关资源
    最近更新 更多