#javascript #css #loops #mouseevent #addeventlistener
#javascript #css #циклы #mouseevent #addeventlistener
Вопрос:
В основном я делаю проект odin projects Etch-a-Sketch. Они хотят, чтобы я создал сетку размером 16×16 и изменил ее на случайный цвет при наведении на нее. Мы должны создать divs для сетки в JS. Я их создал, и сетка выложена (не включал CSS, поскольку он не имеет значения). Я не могу заставить его изменить цвет, хотя!
Надеюсь, все в порядке, это мой первый пост здесь!
// Declaring important variables//
const container = document.getElementById('container');
//16x16 square grid divs//
function makeRows(rows, cols) {
container.style.setProperty('--grid-rows', rows);
container.style.setProperty('--grid-cols', cols);
for (i = 0; i < (rows * cols); i ) {
let cell = document.createElement('div');
cell.addEventListener('mouseover', function() {
let rcolor = '#' Math.floor(Math.random() * 16777215).toString(16);
cell.style.backgroundColor = rcolor;
});
container.appendChild(cell).className = "grid-item";
};
};
makeRows(16, 16);
:root {
--grid-cols: 1;
--grid-rows: 1;
padding: 0px;
margin: 0px;
}
#container {
display: grid;
grid-gap: 1em;
grid-template-rows: repeat(var(--grid-rows), 1fr);
grid-template-columns: repeat(var(--grid-cols), 1fr);
}
.grid-item {
text-align: center;
}
<div id="container"></div>
Комментарии:
1. Ваш код работает нормально …. я предполагаю, что это проблема с CSS …. которую вы не показали
2. @epascarello я обновил, чтобы показать CSS
3. Добавьте
border: 1px solid black;
в ячейки, это покажет вам, почему оно не работает4. О боже, лол, спасибо. Я чувствую себя глупо, лол!
Ответ №1:
Ваши блоки не занимают никакого места, поэтому смотреть нечего.
// Declaring important variables//
const container = document.getElementById('container');
//16x16 square grid divs//
function makeRows(rows, cols) {
container.style.setProperty('--grid-rows', rows);
container.style.setProperty('--grid-cols', cols);
for (i = 0; i < (rows * cols); i ) {
let cell = document.createElement('div');
cell.addEventListener('mouseover', function() {
let rcolor = '#' Math.floor(Math.random() * 16777215).toString(16);
cell.style.backgroundColor = rcolor;
});
container.appendChild(cell).className = "grid-item";
};
};
makeRows(16, 16);
:root {
--grid-cols: 1;
--grid-rows: 1;
padding: 0px;
margin: 0px;
}
#container {
display: grid;
grid-template-rows: repeat(var(--grid-rows), 1fr);
grid-template-columns: repeat(var(--grid-cols), 1fr);
}
.grid-item {
--aspect-ratio: 1/1;
text-align: center;
}
.grid-item::before {
content: "";
display: inline-block;
width: 1px;
height: 0;
padding-bottom: calc(100% / (var(--aspect-ratio)));
}
<div id="container"></div>
Ответ №2:
В вашем коде все работает нормально, вам просто нужно добавить ширину и высоту для вашей #container
работы и границу для вашего контейнера, чтобы вы могли это видеть. В противном случае я протестировал это, и это сработало.
Добавьте это (пример):
CSS:
#container {
border: 1px solid black;
height: 450px;
width: 500px;
}