Как показать некоторые элементы в сетке CSS, пока не будет нажата кнопка «Увидеть больше»?

У меня есть сетка css с несколькими элементами, каждая строка имеет три или четыре области сетки. Как отобразить одну строку (или первые три или четыре элемента), за которой следует кнопка «Подробнее»? Затем эта кнопка будет отображать следующий набор элементов, за которым следует кнопка «увидеть больше» и так далее.

В настоящее время я могу загрузить все элементы сетки сразу как полную сетку.

Вот css для сетки:

.grid-rp{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  grid-gap: 2em;
  margin: 0;
}

Вот содержимое сетки для двух элементов в качестве примера:

<div class = "grid-rp">
  <div class = "rp-details">
    <a href = "#" target = "_blank"><h3>Title</h3></a>
    <p>content goes here</p>
  </div>

  <button class = "show-more">Show More</button>

  <div class = "rp-details">
    <a href = "#" target = "_blank"><h3>Title</h3></a>
    <p>content goes here</p>
  </div>
</div>

Мне нужна помощь с JS для кнопки.

Я хотел бы нажать кнопку «Загрузить еще» и отобразить следующую область содержимого. До щелчка этот контент должен быть скрыт.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
1 632
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привяжите обработчик события щелчка и переключите класс (укажите CSS для скрытия) при щелчке.

// get button and bind click event handler
document.querySelector('.show-more').addEventListener('click', function() {
  // get rp-detail element which is sibling to the button
  // and then toggle the class
  this.nextElementSibling.classList.toggle('hidden')
})
.grid-rp {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  grid-gap: 2em;
  margin: 0;
}


/* style for hiding */

.rp-details.hidden {
  display: none;
}
<div class = "grid-rp">
  <div class = "rp-details">
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>

  <button class = "show-more">Show More</button>

  <div class = "rp-details hidden">
  <!-- set class here ---^^^^^^---->
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>
</div>

ОБНОВИТЬ : Если есть несколько элементов и позиция кнопки где-то в другом месте, сделайте это так.

// get button and bind click event handler
document.querySelector('.show-more').addEventListener('click', function() {
  // get rp-detail element with toggle class
  // then iterate and toggle class of each element
  document.querySelectorAll('.rp-details.toggle').forEach(ele => ele.classList.toggle('hidden'))
})
.grid-rp {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  grid-gap: 2em;
  margin: 0;
}


/* style for hiding */

.rp-details.hidden {
  display: none;
}
<div class = "grid-rp">
  <div class = "rp-details">
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>

  <div class = "rp-details hidden toggle">
    <!-- set class here ---^^^^^^---->
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>
  <div class = "rp-details hidden toggle">
    <!-- set class here ---^^^^^^---->
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>
  <div class = "rp-details hidden toggle">
    <!-- set class here ---^^^^^^---->
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>
  <div class = "rp-details hidden toggle">
    <!-- set class here ---^^^^^^---->
    <a href = "#" target = "_blank">
      <h3>Title</h3>
    </a>
    <p>content goes here</p>
  </div>
</div>

<button class = "show-more">Show More</button>

Спасибо за ваш ответ. Я попробовал эту настройку, и она работает для одной области содержимого после кнопки. Как я могу загрузить сразу три области контента с помощью кнопки? Кроме того, как я могу заставить кнопку загружать содержимое перед кнопкой в ​​сетке? Это позволит кнопке всегда оставаться в конце сетки.

Iisrael 11.04.2019 01:01

Пранав, спасибо за обновление, но, похоже, оно не работает. Любые идеи о том, как это исправить?

Iisrael 11.04.2019 15:33

Пранав, вот ссылка на код, который вы настроили в jsfiddle: jsfiddle.net/iisrael/koyz74fr/1

Iisrael 11.04.2019 15:45

@Iisrael: хорошо, позвольте мне проверить

Pranav C Balan 11.04.2019 15:47

@Iisrael: ой, нашел проблему ... отсутствует s здесь ('.rp-detail.toggle') => ('.rp-details.toggle')

Pranav C Balan 11.04.2019 15:51

Пранав, спасибо за проверку, это точно работает! Я ненавижу испытывать здесь свою удачу, но что, если я хочу загружать только следующие 2 элемента при каждом нажатии кнопки? Извините, я действительно начинаю свою работу с JS и, кажется, ничего не знаю. Кроме того, есть ли у вас какие-либо предложения по ресурсам для изучения того, как использовать элементы, которые вы показали в своем коде?

Iisrael 11.04.2019 15:57

Другие вопросы по теме