Задать вопрос
@MisTFoR

Как сделать, если элементов больше 5 — то они скрывались? И открывались по нажатии кнопки?

Здравствуйте!
Помогите решить такой вопрос:
Как сделать так - что если генерируемых блоков больше 5 - то они скрывались? И раскрывались по нажатии на кнопку "Показать все"?

Вот пример:
<div class="content">
   <div class="filter">
      <p>Текст - 1</p>
   </div>
   <div class="filter">
      <p>Текст - 2</p>
   </div>
   <div class="filter">
      <p>Текст - 3</p>
   </div>
   <div class="filter">
      <p>Текст - 4</p>
   </div>
   <div class="filter">
      <p>Текст - 5</p>
   </div>
   <p>Показать остальное</p>
</div>
  • Вопрос задан
  • 431 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 1
IsSavinykh
@IsSavinykh
Full-Stack Веб-разработчик, мобильный разработчик
При генерации блоков задайте атрибут hidden всем блокам, начиная с шестого (чтобы первые 5 отображались)
<div class="content">
   <div class="filter">
      <p>Текст - 1</p>
   </div>
   <div class="filter">
      <p>Текст - 2</p>
   </div>
   <div class="filter">
      <p>Текст - 3</p>
   </div>
   <div class="filter">
      <p>Текст - 4</p>
   </div>
   <div class="filter">
      <p>Текст - 5</p>
   </div>
   <div class="filter" hidden>
      <p>Текст - 6</p>
   </div>
   <div class="filter" hidden>
      <p>Текст - 7</p>
   </div>
   <div class="filter" hidden>
      <p>Текст - 8</p>
   </div>
   <div class="filter" hidden>
      <p>Текст - 9</p>
   </div>
   <div class="filter" hidden>
      <p>Текст - 10</p>
   </div>
   <p class="show_content">Показать остальное</p>
</div>

Далее на Jquery напишите код..
$(document).ready(() => {
        $('body').on('click', '.show_content' , () => {
            var scrollToProduct = $('.filter:hidden');
            $('.filter:hidden:lt(5)').slideDown(1000);
            if (scrollToProduct.length === 0) $('.show_content').hide() ;
            $('html, body').animate({
                scrollTop: scrollToProduct.offset().top
            }, 1000);
        });
    });

$('.filter:hidden:lt(5)').slideDown(1000); - 5 можете заменить на любое значение, именно столько блоков будут отображаться при каждом нажатии на "Показать остальное"
Также может быть будет полезным после нажатия на кнопку "Показать остальное", чтобы вас плавно скроллило на первый новый отобразившийся блок)
Либо, если Вам нужно, чтобы при нажатии на кнопку отображались все блоки, то напишите:
$(document).ready(() => {
        $('body').on('click', '.show_content' , () => {
            var scrollToProduct = $('.filter:hidden');
            $('.filter:hidden').slideDown(1000);
            if (scrollToProduct.length === 0) $('.show_content').hide() ;
            $('html, body').animate({
                scrollTop: scrollToProduct.offset().top
            }, 1000);
        });
    });

или примитивный вариант:
$(document).ready(() => {
        $('body').on('click', '.show_content' , () => {
            var scrollToProduct = $('.filter:hidden');
            $('.filter:hidden').show();
            if (scrollToProduct.length === 0) $('.show_content').hide() ;
        });
    });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maxhd
типо такого? codepen
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы