Оберните два поля другим div
(.container
) и переключайте их при наведении на контейнер:
.box {
display: inline-block;
width: 300px;
height: 150px;
margin: 20px 40px;
border-radius: 4px;
cursor: pointer;
}
.box-one {
background: green;
}
.box-two {
background: whitesmoke;
}
.container {
width: fit-content;
}
.container:hover>.box-one {
display: none;
}
.container:not(:hover)>.box-two {
display: none;
}
<div class="container">
<div class="box box-one"></div>
<div class="box box-two"></div>
</div>
Используя события JS mouseenter
и mouseleave
, вы можете добавить прослушиватель событий с опцией once: true
только к текущему элементу. Как только указатель мыши входит, вы показываете новый элемент, и только когда пользователь покидает текущий элемент, вы добавляете новый mouseenter
прослушиватель событий к текущему элементу и так далее ...
const showNext = evt => {
const current = evt.target
const next = current.nextElementSibling
if(!next || !next.classList.contains('box')) return
current.classList.remove('show')
next.classList.add('show')
next.addEventListener('mouseleave', () => {
next.addEventListener('mouseenter', showNext, { once: true })
}, { once: true })
}
document.querySelector('.box')
.addEventListener('mouseenter', showNext, { once: true })
.box {
display: none;
width: 300px;
height: 150px;
margin: 20px 40px;
border-radius: 4px;
cursor: pointer;
}
.show {
display: inline-block;
}
.box-one {
background: green;
}
.box-two {
background: whitesmoke;
}
.box-three {
background: red;
}
.box-four {
background: blue;
}
.container {
width: fit-content;
}
<div class="box box-one show"></div>
<div class="box box-two"></div>
<div class="box box-three"></div>
<div class="box box-four"></div>