我试图用JS进行一些练习,我有两个圆圈,它们的大小按比例放大;鼠标输入";通过将悬停类添加到圆中。我想要的是一旦两个圆都有悬停类;激光";元素通过显示器显示它自己="0";块";。即使鼠标输入功能工作;激光";元素永远不会被触发。这是因为JS在满足mouseenter条件之前就已经加载了吗?我应该使用事件监听器来监听悬停,还是有更好的方法来实现这一点。
const circle = document.querySelector('#circle');
const circleTwo = document.querySelector('#circle2');
if (circle !== null) {
circle.addEventListener('mouseenter', () => {
circle.classList.add('hover');
});
}
if (circleTwo !== null) {
circleTwo.addEventListener('mouseenter', () => {
circleTwo.classList.add('hover');
});
};
if (circleTwo.classList.contains('hover') && circle.classList.contains('hover')) {
document.getElementById("laser").style.display = "block"
};
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 href="styles.css" rel="stylesheet" />
<script type="text/javascript" src="app.js" defer></script>
<title>Something Else</title>
<style>
body { background-color: gray; background-image: url(images/acid.gif); background-size: cover; background-repeat: no-repeat;}
</style>
</head>
<body>
<div class="container">
<div id="circle">Text</div>
<div id="circle2">Text</div>
<a href="laser.html"><img src="images/laserEyes.png" id="laser"></a>
</div>
</body>
</html>
您的代码有一些问题。
-
您不会删除悬停类。您可以很容易地监听mouseleave事件,然后将其删除。
-
if语句只执行一次。您应该将它添加到事件处理程序中。
您只需为两个事件使用一个处理程序函数:
const circleMouseenterHandler = e => {
e.target.classList.add('hover');
if (circleTwo.classList.contains('hover') && circle.classList.contains('hover')) {
document.getElementById("laser").style.display = "block"
};
}
circle.addEventListener('mouseenter', circleMouseenterHandler);
circleTwo.addEventListener('mouseenter', circleMouseenterHandler);
//Removing:
const circleMouseleaveHandler = e => {
e.target.classList.remove('hover');
}
circle.addEventListener('mouseleave', circleMouseleaveHandler);
circleTwo.addEventListener('mouseleave', circleMouseleaveHandler);