Skip to content

Instantly share code, notes, and snippets.

@FARCER
Last active May 22, 2021 14:27
Show Gist options
  • Save FARCER/9453ef65250f8cc8551c1e6b6e1ef3d9 to your computer and use it in GitHub Desktop.
Save FARCER/9453ef65250f8cc8551c1e6b6e1ef3d9 to your computer and use it in GitHub Desktop.
Tabs Native JS
// pug
ul.tabs-nav
li(data-tab-name="tab-1").tabs-nav__item.tabs-nav__item--active Таб 1
li(data-tab-name="tab-2").tabs-nav__item Таб 2
.tabs-content
.tabs-content__item.tab-1.tabs-content__item--active
p 1
.tabs-content__item.tab-2
p 2
//scss
.tabs-content {
&__item {
display: none;
&.is-active { display: block; }
}
}
// js
const tab = function () {
let tabNav = document.querySelectorAll('.tabs-nav__item'), // Выбираем элементы навигации табов
tabContent = document.querySelectorAll('.tabs-content__item'), // Выбираем самы табы
tabName; // Переменная для имени таба
// Проходим циклом по каждому элементу навигации и навешиваем обработчик клика, который вызывает функцию selectTabNav
tabNav.forEach((item) => {
item.addEventListener('click', selectTabNav)
});
function selectTabNav() {
tabNav.forEach((item) => {
// Удаляем активный класс у всех элементов навигации табов
item.classList.remove('is-active');
});
this.classList.add('is-active'); // Добавляем активный укласс у элемента по которому кликнули
tabName = this.getAttribute('data-tab-name'); // Получаем имя таба, который нам нужен
selectTabContent(tabName); // Запускаем функцию, чтобы показать выбранный таб
}
function selectTabContent(tab) {
// Проходим по всем табам и проверяем есть ли у элемента класс, равный имени таба(переменной tabName). Если есть, то добавляем класс активного таба, если нет, то удаляем этот класс
tabContent.forEach((item) => {
let classList = item.classList;
classList.contains(tab) ? classList.add('is-active') : classList.remove('is-active');
});
}
};
tab();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment