#javascript #html #css
Вопрос:
Я работаю над простой игрой в качестве упражнения проекта Odin под названием «ВЫТРАВИТЬ ЭСКИЗ». Когда мышь перемещается по квадратам, они должны менять цвет. Но я не могу заставить событие onmouseover работать. Как вы думаете, в чем проблема?
index.html
<!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" />
<link rel="stylesheet" href="style.css" />
<title>ETCH-A-SKETCH</title>
</head>
<body>
<div class="container"></div>
<script src="app.js"></script>
</body>
</html>
app.js
const body = document.querySelector('body');
const Btn = document.createElement('button');
const container = document.querySelector('.container');
const squares = document.querySelectorAll('.square');
body.append(Btn);
body.insertBefore(Btn, container);
Btn.innerText = 'Create A New Grid';
....
squares.forEach((square) => {
square.addEventListener('onmouseover', (e) => {
console.log(e);
e.preventDefault();
square.classList.add('zapper');
});
});
style.css
.zapper {
background-color: #fff;
}
.zapper:hover {
background-color: black;
}
Комментарии:
1.
'onmouseover'
->'mouseover'
2. Вы используете
on
префикс при объявлении события в html (т. Е.:<div onclick=func()>
но опускаете при объявлении вaddEventListener
конструкторе3. Вы хотите изменить цвет с помощью CSS, а не Javascript.
4. @connexo Что вы предлагаете? квадрат.стиль.цвет фона = ‘черный’ ?? Это нормально, за исключением того, что событие мыши не запускается для его реализации.
Ответ №1:
если вы используете прослушиватели событий, этого mouseover
не должно быть onmouseover
подобный этому:
square.addEventListener('mouseover', (e) => {
если вы хотите использовать onmouseover
, он должен использоваться в html-атрибутах, подобных этому
<button onmouseover="functionName()">
on
префикс используется для атрибутов html, удалите on
, когда вы используете прослушиватели событий
Комментарии:
1. Я изменил его на наведение курсора мыши, но проблема сохраняется.
Ответ №2:
проблема в том, что JavaScript работает очень быстро. В основном происходит то, что код yow завершается до отображения dom, когда он хочет добавить событие en к элементам yow, их все еще нет на экране. Вам нужно указать JavaScript, чтобы добавить прослушиватель после подключения dom
window.addEventListener('DOMContentLoaded', (event) => {
console.log('DOM fully loaded and parsed');
const body = document.querySelector('body');
const Btn = document.createElement('button');
const container = document.querySelector('.container');
const squares = document.querySelectorAll('.square');
body.append(Btn);
body.insertBefore(Btn, container);
Btn.innerText = 'Create A New Grid';
....
squares.forEach((square) => {
square.addEventListener('onmouseover', (e) => {
console.log(e);
e.preventDefault();
square.classList.add('zapper');
});
});
});
Комментарии:
1. Спасибо. Он действительно нуждался в этом. Но проблема сохраняется. Обратите внимание, что onmouseover был заменен наведением мыши.