Просто проверьте, больше ли idx
чем 4:
let contents = document.querySelectorAll('.contents');
let table = document.querySelector('.table');
function eventRegister() {
contents.forEach((item, idx) => {
item.addEventListener('mouseenter', () => {
if (idx > 4) {
table.classList.remove('shown');
} else {
table.classList.add('shown');
}
});
});
}
eventRegister();
.shown {
background-color: orange;
}
<div class="box">
<div class="contents">this</div>
<div class="contents">is</div>
<div class="contents">a</div>
<div class="contents">text</div>
<div class="contents">group</div>
<div class="contents">test</div>
</div>
<div class="table">
<div class="things">a</div>
<div class="things">b</div>
<div class="things">c</div>
<div class="things">d</div>
</div>
Обратите внимание, что первый параметр forEach
является текущим итерируемым элементом, поэтому вы, вероятно, должны называть его item
, а не items
, чтобы не запутаться. (Это не коллекция, это отдельный элемент.)
Вы также можете использовать делегирование событий вместо добавления множества отдельных слушателей:
let contents = document.querySelectorAll('.contents');
let table = document.querySelector('.table');
function eventRegister() {
const box = document.querySelector('.box');
box.addEventListener('mouseover', ({ target }) => {
if (!target.matches('.contents')) {
return;
}
const index = [...box.children].indexOf(target);
if (index > 4) {
table.classList.remove('shown');
} else {
table.classList.add('shown');
}
});
}
eventRegister();
.shown {
background-color: orange;
}
<div class="box">
<div class="contents">this</div>
<div class="contents">is</div>
<div class="contents">a</div>
<div class="contents">text</div>
<div class="contents">group</div>
<div class="contents">test</div>
</div>
<div class="table">
<div class="things">a</div>
<div class="things">b</div>
<div class="things">c</div>
<div class="things">d</div>
</div>