Как сделать чтобы скрипт срабатывал для множества элементов?
Как изменить данный скрипт чтобы он срабатывал для множества элементов с одинаковыми классами (для блога), он работает только для первого элемента, при наведении курсора на последующие элементы ничего не происходит.
let [frontBlock, backBlock] = [
document.querySelector('.frontBlock'), document.querySelector('.backBlock'), 0
]
frontBlock.addEventListener('mouseover', (e) => {
if (e.target && e.relatedTarget && e.target.closest('div') !== e.relatedTarget.closest('div') && e) {
e.target.closest('div').style.display = 'none';
backBlock.style.display = 'block';
}
})
backBlock.addEventListener('mouseout', (e) => {
if (e.target && e.relatedTarget && e.target.closest('div') !== e.relatedTarget.closest('div')) {
e.target.closest('div').style.display = 'none';
frontBlock.style.display = 'block';
}
})
Т.е. вот такой код блога, для первого контейнера этот скрипт работает, при наведении мышки на второй и последующие контейнеры ничего не происходит
<div class="container">
<div class="frontBlock">
<img src="1.jpg">
</div>
<div class="backBlock">
<img src="2.jpg">
</div>
</div>
<div class="container">
<div class="frontBlock">
<img src="3.jpg">
</div>
<div class="backBlock">
<img src="4.jpg">
</div>
</div>
Один блок находится над другим.
.container{
position: relative;
}
.frontBlock{
position: absolute;
}
.backBlock{
z-index: 9;
}
Ответы (1 шт):
Можно что-то такое сделать.. document.querySelectorAll('.frontBlock') возвращает коллекцию т.е. [<div class="frontBlock">frontBlock</div>, <div class="frontBlock">frontBlock</div>].
А document.querySelector('.frontBlock') вернёт первый попавшийся <div class="frontBlock">frontBlock</div>..
const frontBlock = document.querySelectorAll('.frontBlock');
frontBlock.forEach(element => { //цикл по коллекции, берем оди элемент
element.addEventListener('mouseover', (e) => { //Вешаем слушатель
e.target.closest(".container").querySelector('.frontBlock').style.display = 'none'; //Скрываем элемент на котором висит этот слушатель
});
element.addEventListener('mouseout', (e) => {
e.target.closest(".container").querySelector('.frontBlock').style.display = 'block'; //Показываем элемент на котором висит этот слушатель
})
});
.container {
width: 100%;
height: 100px;
margin-top: 20px;
position: relative;
background: gray;
}
img {
position: relative;
height: 100%;
}
.frontBlock {
position: absolute;
width: 100%;
height: 50%;
background: green;
z-index: 2;
text-align: center;
}
.backBlock {
position: absolute;
width: 100%;
height: 50%;
background: blue;
z-index: 1;
text-align: center;
}
<div class="container">
<div class="frontBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_argentina.jpg"></div>
<div class="backBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_algir.jpg"></div>
</div>
<div class="container">
<div class="frontBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_argentina.jpg"></div>
<div class="backBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_algir.jpg"></div>
</div>
Вариант без js
.container {
width: 100%;
height: 100px;
margin-top: 20px;
position: relative;
background: gray;
}
img {
position: relative;
height: 100%;
}
.frontBlock {
position: absolute;
width: 100%;
height: 50%;
background: green;
z-index: 2;
text-align: center;
}
.frontBlock:hover {
display: none;
}
.backBlock {
position: absolute;
width: 100%;
height: 50%;
background: blue;
z-index: 1;
text-align: center;
}
<div class="container">
<div class="frontBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_argentina.jpg"></div>
<div class="backBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_algir.jpg"></div>
</div>
<div class="container">
<div class="frontBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_argentina.jpg"></div>
<div class="backBlock"><img src="https://www.dorogavrim.ru/img/flagi/flag_algir.jpg"></div>
</div>