только на первую кнопку...
querySelector
querySelector()
находит и отдаёт первый элемент, подходящий селектору. Остальные остаются вне игры.querySelectorAll()
выберет все подходящие. Но потом коллекцию (NodeList) надо обходить циклом. Например, querySelectorAll(...).forEach(item => что-то-сделать-с-item)
.button.btn-more
, дальше исходя из этой кнопки находить в DOM-дереве ближайшие элементы, которым надо менять классы. Делегирование событий. <div class="portfolio"><button class="btn-more">подробнее</button>...</div>
<div class="portfolio"><button class="btn-more">подробнее</button>...</div>
<div class="portfolio"><button class="btn-more">подробнее</button>...</div>
// Это не нужно. К body можно обратиться напрямую document.body
//const bodyPortfolio = document.querySelector('body');
[...document.querySelectorAll('.portfolio')].forEach(function(item){
const caseBtn = item.querySelector('.btn-more');
const caseCloseBtn = item.querySelector('.close__content');
const caseContent = item.querySelector('.portfolio__content');
caseBtn.addEventListener('click', (event) => {
event.stopPropagation();
caseContent.classList.add('case__active');
document.body.classList.add('overflowhidden');
});
caseCloseBtn.addEventListener('click', (event) => {
event.stopPropagation();
caseContent.classList.remove('case__active');
document.body.classList.remove('overflowhidden');
});
});
$('.btn__arrow__stroke').click(function() {
let tabsContent = $(this).closest('.tab_content.active');
let tabsToggler = $(this).closest('.tab_container').prev().find('li.active');
let dir = $(this).text().trim() == 'Пред.' ? 'prev' : 'next';
if (dir == 'prev') {
if (tabsToggler.prev().length) {
tabsToggler.prev().addClass('active').siblings().removeClass('active');
tabsContent.prev().show().addClass('active').siblings().hide().removeClass('active');
}
} else {
if (tabsToggler.next().length) {
tabsToggler.next().addClass('active').siblings().removeClass('active');
tabsContent.next().show().addClass('active').siblings().hide().removeClass('active');
}
}
});