@VovikSpb

Как сделать фильтр по категориям с кнопкой «Показать ещё» на чистом JS?

Привет, кто силён в JS? Три дня мучаюсь уже с одним блоком. Блок типа галерея с фильтром: вверху 5 кнопок для сортировки картинок по категориям, а внизу кнопка "показать ещё", которая должна открывать картинки скрытые до этого. В общем посмотрел как делается фильтр и как делается кнопка, по отдельности всё норм. Но когда нахожусь в отдельной категории кнопка "показать ещё" открывает все картинки, а не те которые должны быть в этой категории. Помогите люди добрые)))

<div class="wrapper">
        <div class="container">

            <h1 class="title">Фильтр контента по категориям</h1>

            <ul class="filter">
                <li class="button button_type_all" data-filter="all">Все</li>
                <li class="button button_type_winter" data-filter="winter">Зима</li>
                <li class="button button_type_spring" data-filter="spring">Весна</li>
                <li class="button button_type_summer" data-filter="summer">Лето</li>
                <li class="button button_type_autumn" data-filter="autumn">Осень</li>
            </ul>

            <div class="blocks">

                <ul class="blocks__row">

                    <li class="blocks__item summer big">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/summer1.jpg" alt="summer">
                        </a>
                        <span>Лето</span>
                    </li>
                    <li class="blocks__item autumn">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/autumn1.jpg" alt="autumn">
                        </a>
                        <span>Осень</span>
                    </li>
                    <li class="blocks__item winter medium">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/winter1.jpg" alt="winter">
                        </a>
                        <span>Зима</span>
                    </li>
                    <li class="blocks__item spring">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/spring1.jpg" alt="spring">
                        </a>
                        <span>Весна</span>
                    </li>

                    <!-- hidden images -->

                    <li class="blocks__item summer more big">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/summer1.jpg" alt="summer">
                        </a>
                        <span>Лето</span>
                    </li>
                    <li class="blocks__item autumn more">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/autumn1.jpg" alt="autumn">
                        </a>
                        <span>Осень</span>
                    </li>
                    <li class="blocks__item winter more medium">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/winter1.jpg" alt="winter">
                        </a>
                        <span>Зима</span>
                    </li>
                    <li class="blocks__item spring more">
                        <a class="blocks__link" href="#">
                            <img class="blocks__img" src="img/spring1.jpg" alt="spring">
                        </a>
                        <span>Весна</span>
                    </li>

                </ul>
                <button class="blocks__btn" type="button" id="btn">Показать ещё</button>
            </div>
        </div>
    </div>


function app() {
    const buttons = document.querySelectorAll('.button'),
        cards = document.querySelectorAll('.blocks__item')

    function filter(category, items) {
        items.forEach((item) => {
            const isItemFiltered = !item.classList.contains(category),
                isShowAll = category.toLowerCase() === 'all'
            if (isItemFiltered && !isShowAll) {
                item.classList.add('hide')
            } else {
                item.classList.remove('hide')
            }
        })
    }

    buttons.forEach((button) => {
        button.addEventListener('click', () => {
            const currentCategory = button.dataset.filter
            filter(currentCategory, cards)
    })

    // ! Скрыть/показать блок по клику
    const btnMore = document.querySelector('#btn');
    let showMore = document.querySelectorAll('.more');

    btnMore.addEventListener("click", function (event) {
        event.preventDefault();
        for (let y = 0; y < showMore.length; y++) {
            showMore[y].classList.toggle('show');
        }
        showMore.forEach(item => {
            if (item.classList.contains('show')) {
                item.style.display = 'block'
            } else {
                item.style.display = 'none'
            }
        })
        console.log(btnMore);
    })
})
}
app()
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы