V
V
VovikSpb2021-07-07 16:45:40
JavaScript
VovikSpb, 2021-07-07 16:45:40

How to make a category filter with a "Show more" button in pure JS?

Hello, who is strong in JS? For three days I have been suffering with one block. A gallery block with a filter: at the top there are 5 buttons for sorting pictures into categories, and at the bottom there is a "show more" button, which should open pictures hidden before. In general, I looked at how the filter is made and how the button is made, individually everything is fine. But when I'm in a separate category, the "show more" button opens all the pictures, and not those that should be in this category. Help good people

<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()

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question