Помогите убрать обработку события при дальнейшем наведении
Есть табличка, которая меняется при наведении. но проблема в том, что если ты на нее наводишь и задеваешь еще какой-то блок внутри, она продолжает отрабатывать. Подскажите, что и где нужно добавить/изменить, чтоб отрабатывал правильно: При наведении на карточку(она делала ротэйт один раз), а когда убираешь курсор с нее, она возвращается в предыдущие положение. код: https://codepen.io/okylist/pen/abYWKPp
const wr = document.querySelectorAll('.wrapper')
wr.forEach((items) => {
items.addEventListener('mouseover', (e) => {
console.log(e.target);
setTimeout(() => {
items.children[0].style.display = "none"
items.children[1].style.display = "none"
items.children[2].style.display = "block"
}, 300)
})
items.addEventListener('mouseout', (e) => {
setTimeout(() => {
console.log(e.target);
items.children[0].style.display = "block"
items.children[1].style.display = "block"
items.children[2].style.display = "none"
}, 300)
})
})
Ответы (1 шт):
Чтобы ваш подход заработал, нужно существенно менять структуру, четко разделить лицевую и оборотную сторону карточки, оборачивать еще в один блок, размеры которого должны быть неизменны, использовать mouseenter/mouseleave и т.д.
Но лучше углубиться в возможности CSS, которые позволяют решить эту задачу без JS:
.card-wrapper {
display: flex;
width: 300px;
height: 180px;
perspective: 1200px;
}
.card {
flex-grow: 1;
transition: transform 0.7s;
transform-style: preserve-3d;
border: 1px solid #000;
position: relative;
}
.card-wrapper:hover .card {
transform: rotateY(180deg);
}
.card-front, .card-back {
position: absolute;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
backface-visibility: hidden;
}
.card-front {
background-color: white;
}
.card-back {
background-color: #2980b9;
transform: rotateY(180deg);
}
<div class="card-wrapper">
<div class="card">
<div class="card-front">FRONT</div>
<div class="card-back">BACK</div>
</div>
</div>
Ключевыми свойствами здесь являются transform-style и backface-visibility.