Помощь с сотнями всплывающих окон

У меня есть несколько карточек. К каждой карточки привязан свой popup. Но я сделала не правильно... Я к каждой кнопке "Подробнее" привязала свой popup(n), где n - номер popup-а. Как это можно оптимизировать, что б не плодить код?

На данный момент у меня таких popup-ов штук 50. Прикладываю несколько из них:

$(document).ready(function() {
  /*  Третья новость  */
  $('#reg-four').click(function() {
    $('#popup-fade4').fadeIn();
    return false;
  });

  // Клик по ссылке "Закрыть".
  $('#popup__close_four').click(function() {
    $(this).parents('#popup-fade4').fadeOut();
    return false;
  });

  // Закрытие по клавише Esc.
  $(document).keydown(function(e) {
    if (e.keyCode === 27) {
      e.stopPropagation();
      $('#popup-fade4').fadeOut();
    }
  });

  // Клик по фону, но не по окну.
  $('#popup-fade4').click(function(e) {
    if ($(e.target).closest('#popup4').length == 0) {
      $(this).fadeOut();
    }
  });

  /*  Третья новость  */
  $('#reg-five').click(function() {
    $('#popup-fade5').fadeIn();
    return false;
  });

  // Клик по ссылке "Закрыть".
  $('#popup__close_five').click(function() {
    $(this).parents('#popup-fade5').fadeOut();
    return false;
  });

  // Закрытие по клавише Esc.
  $(document).keydown(function(e) {
    if (e.keyCode === 27) {
      e.stopPropagation();
      $('#popup-fade5').fadeOut();
    }
  });

  // Клик по фону, но не по окну.
  $('#popup-fade5').click(function(e) {
    if ($(e.target).closest('#popup5').length == 0) {
      $(this).fadeOut();
    }
  });

  /*  Третья новость  */
  $('#reg-six').click(function() {
    $('#popup-fade6').fadeIn();
    return false;
  });

  // Клик по ссылке "Закрыть".
  $('#popup__close_six').click(function() {
    $(this).parents('#popup-fade6').fadeOut();
    return false;
  });

  // Закрытие по клавише Esc.
  $(document).keydown(function(e) {
    if (e.keyCode === 27) {
      e.stopPropagation();
      $('#popup-fade6').fadeOut();
    }
  });

  // Клик по фону, но не по окну.
  $('#popup-fade6').click(function(e) {
    if ($(e.target).closest('#popup6').length == 0) {
      $(this).fadeOut();
    }
  });
});
ul,
li,
h1,
h2,
h3,
h4,
h5,
h6,
div,
p,
img,
form,
input,
a,
i,
p {
  padding: 0;
}

header {
  position: relative;
  color: #f1f1f1;
}

input:hover,
input,
input:focus {
  border: none;
  outline: none;
}

button,
button:visited,
button:active {
  border: none;
  outline: none;
}

span,
span:visited,
span:active {
  border: none;
  outline: none;
}

.clearfix {
  content: '';
  display: block;
  width: 100%;
  clear: both;
}

.way-desc {
  border-radius: 3px;
  box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
  margin-top: 30px;
  overflow: hidden;
}

.way-desc__title_block {
  float: left;
  width: 33.33%;
  text-align: center;
  position: relative;
  height: 350px;
}

.way-desc__title {
  font-weight: 400;
  font-size: 1.5em;
  margin-bottom: 0;
  line-height: 320px;
  text-transform: uppercase;
}

.way-desc__title:after {
  content: '';
  width: 25%;
  height: 2px;
  background-color: rgba(11, 59, 167, 0.5);
  margin: 10px auto 0px auto;
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, 0%);
}

.way-desc__photo_block {
  float: left;
  width: 33.33%;
  height: 350px;
}

.way-desc__photo_block img {
  object-fit: cover;
  width: 100%;
  height: 100%;
}

.way-desc__text {
  float: left;
  width: 33.33%;
  height: 350px;
}

.way-sec__par {
  text-align: left;
  font-weight: 400;
  color: rgba(4, 23, 65, 0.7);
  width: 75%;
  margin: 20px 42px;
}

.way-desc__title_block:hover {
  background-color: #0b3ba7;
  height: 350px;
  transition: all 0.3s ease;
}

.way-desc__title_block:hover h3 {
  color: #f1f1f1;
  transition: all 0.3s ease;
}

.way-desc__title_block:hover .way-desc__title:after {
  background-color: rgba(241, 241, 241, 0.5);
  top: 55%;
  transition: all 0.3s ease;
}

.way-desc__text:hover {
  background-color: #0b3ba7;
  transition: all 0.3s ease;
  height: 350px;
  display: block;
}

.way-desc__text:hover p {
  color: #f1f1f1;
  transition: all 0.3s ease;
}

.popup-fade {
  background: rgba(0, 0, 0, 0.5);
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 100000;
  padding-top: 50px;
  overflow: scroll;
  display: none;
}

.popup {
  background-color: #fff;
  width: 100%;
  padding-bottom: 30px;
}

.popup__img {
  width: 100%;
  height: 336px;
}

.popup__data {
  margin: 26px 0px 24px 42px;
  color: #fab165;
  font-weight: 400;
  font-size: 1.625em;
  display: inline-block;
}

.popup__title {
  margin: 48px 0px 24px 42px;
  color: #041741;
  font-weight: 400;
  font-size: 1.625em;
  width: 700px;
}

.popup__par {
  margin: 0px 0px 24px 42px;
  color: rgba(4, 23, 65, 0.76);
  font-weight: 400;
  height: 300px;
  overflow-y: scroll;
  width: 96.2%;
}

.popup__icon {
  position: relative;
  display: inline-block;
}

.popup__close {
  color: #fab165;
  font-weight: 400;
  font-size: 1.625em;
  float: right;
  position: absolute;
  top: -3%;
  right: -2%;
}

.popup__close:hover {
  text-decoration: none;
  color: #0b3ba7;
}

.popup__icon i.fas {
  color: rgba(4, 23, 65, 0.1);
  font-size: 4em;
  position: absolute;
  top: -1%;
  left: -1%;
}

.popup__par i.fas.left {
  left: 90%;
  top: 83%;
  position: absolute;
  color: rgba(4, 23, 65, 0.1);
  font-size: 4em;
}
<!DOCTYPE html>
<html lang="ru">

<head>
  <meta charset="UTF-8">
  <title>ПЖ.РФ - Путеводитель</title>

  <!-- FONTS -->
  <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css2?family=Exo+2:ital,wght@0,200;0,400;0,800;1,200;1,400;1,800&display=swap" rel="stylesheet">


  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">


</head>
<html>

<body>
  <!-- Четвёртый путеводитель -->
  <div class="popup-fade" id="popup-fade4">
    <div class="container">
      <div class="row">
        <div class="col-lg-12">
          <div class="popup" id="popup4">
            <div class="popup__img popup__img4"></div>
            <div class="popup__block">
              <a href="" class="popup__close" id="popup__close_four"><i class="fas fa-times"></i></a>
              <h3 class="popup__title">ДАЧА СТАЛИНА</h3>
              <p class="popup__par clearfix">
                <span class="popup__icon">
                                            <i class="fas fa-quote-right"></i>
                                                <i>Хоста, пр. Курортный 120, тел. 8 (862) 297-05-02</i>
                                                Хотите попасть в прошлое, не прибегая к услугам машины времени? Тогда отправляйтесь на дачу Сталина, в одну из 18-ти резиденций великого вождя. Здесь всё осталось таким же, как при жизни советского лидера – «сталинские» интерьеры из ценных пород дерева, зелёный красивый парк и вид на море, вода в котором с этой точки обзора кажется особенно лазурной. 

                                            <i class="fas fa-quote-right left"></i>
                                        </span>
              </p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <!-- Четвёртый путеводитель -->
  <div class="popup-fade" id="popup-fade5">
    <div class="container">
      <div class="row">
        <div class="col-lg-12">
          <div class="popup" id="popup5">
            <div class="popup__img popup__img5"></div>
            <div class="popup__block">
              <a href="" class="popup__close" id="popup__close_five"><i class="fas fa-times"></i></a>
              <h3 class="popup__title">ЧАЙНЫЕ ДОМИКИ</h3>
              <p class="popup__par clearfix">
                <span class="popup__icon">
                                            <i class="fas fa-quote-right"></i>
                                                <i>Уч-Дере, ул. Запорожская 302, тел. 8 (862) 235-16-16</i>
                                                Сочи считается самой северной точкой в мире, где благополучно растёт чай. Сочинский чай почему-то называется «Краснодарским», но его вкусовые качества сродни лучшим индийским и китайским сортам. Убедиться в этом в окружении русских народных интерьеров с самоварами и расписными стенами, наслаждаясь панорамным видом на побережье, можно в знаменитых чайных домиках. 
                                            <i class="fas fa-quote-right left"></i>
                                        </span>
              </p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <!-- Четвёртый путеводитель -->
  <div class="popup-fade" id="popup-fade6">
    <div class="container">
      <div class="row">
        <div class="col-lg-12">
          <div class="popup" id="popup6">
            <div class="popup__img popup__img6"></div>
            <div class="popup__block">
              <a href="" class="popup__close" id="popup__close_six"><i class="fas fa-times"></i></a>
              <h3 class="popup__title">33 ВОДОПАДА</h3>
              <p class="popup__par clearfix">
                <span class="popup__icon">
                                            <i class="fas fa-quote-right"></i>
                                                <i>Головинка, урочище Джегош, в долине реки Шахе, в 4 км севернее п. Большой Кичмай</i>
                                                Каскадное чудо природы на территории Национального парка. Сюда не так-то просто добраться! Неглубокую, но стремительную реку Шахе лучше проехать на сочинском «джипе» или ГАЗ-63, которые регулярно там курсируют. 15 минут экстремальной езды от Большого Кичмая – и вот вас встречают первые высокие водопады. Поднимайтесь дальше, смотрите, купайтесь, отдыхайте и наслаждайтесь кристально чистым воздухом. 
                                            <i class="fas fa-quote-right left"></i>
                                        </span>
              </p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <!-- Блоки содержания для вкладок -->
  <div class="tabs__content">
    <div class="row">
      <div class="col-lg-12">
        <div class="way-desc clearfix">
          <div class="way-desc__title_block">
            <h3 class="way-desc__title">Дача Сталина</h3>
          </div>
          <div class="way-desc__photo_block"><img src="../img/way/Дача Сталина.jpg" alt="Фото путеводителя" class="way-desc__photo"></div>
          <div class="way-desc__text">
            <p class="way-sec__par">
              Хотите попасть в прошлое, не прибегая к услугам машины времени? Тогда отправляйтесь на дачу Сталина, в одну из 18-ти резиденций великого вождя. Здесь всё осталось таким же, как при жизни советского лидера – «сталинские» интерьеры из ценных пород дерева,
              зелёный красивый парк и вид на море.

            </p>
            <div class="way-desc__link"><a href="#" id="reg-four">Подробнее</a></div>
          </div>
        </div>
      </div>
    </div>

    <div class="row">
      <div class="col-lg-12">
        <div class="way-desc clearfix">
          <div class="way-desc__title_block">
            <h3 class="way-desc__title">Чайные домики</h3>
          </div>
          <div class="way-desc__photo_block"><img src="../img/way/Чайный домик.jpg" alt="Фото путеводителя" class="way-desc__photo"></div>
          <div class="way-desc__text">
            <p class="way-sec__par">
              Сочи считается самой северной точкой в мире, где благополучно растёт чай. Сочинский чай почему-то называется «Краснодарским», но его вкусовые качества сродни лучшим индийским и китайским сортам.
            </p>
            <div class="way-desc__link"><a href="#" id="reg-five">Подробнее</a></div>
          </div>
        </div>
      </div>
    </div>

    <div class="row">
      <div class="col-lg-12">
        <div class="way-desc clearfix">
          <div class="way-desc__title_block">
            <h3 class="way-desc__title">33 водопада</h3>
          </div>
          <div class="way-desc__photo_block"><img src="../img/way/33 водопада.jpeg" alt="Фото путеводителя" class="way-desc__photo"></div>
          <div class="way-desc__text">
            <p class="way-sec__par">
              Каскадное чудо природы на территории Национального парка. Сюда не так-то просто добраться! Неглубокую, но стремительную реку Шахе лучше проехать на сочинском «джипе» или ГАЗ-63, которые регулярно там курсируют. 15 минут экстремальной езды от Большого
              Кичмая.

            </p>
            <div class="way-desc__link"><a href="#" id="reg-six">Подробнее</a></div>
          </div>
        </div>
      </div>
    </div>

    <!-- JS & JQUERY -->
    <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
</body>

</html>


Ответы (1 шт):

Автор решения: CbIPoK2513

Например такой, банальный и простой вариант.

let body_overflow = $('body').css('overflow') || 'auto'; // для скролла страницы

$('.cards').on('click', '.card .read', function(){ // При нажатии на кнопку "Подробнее" в карточке
  let content = $(this).closest('.card').find('.go-popup').html(); // получим контент
  //
  $('.popup-overlay').find('.content').html(content); // Вставляем описание в popup
  $('.popup-overlay').addClass('-show'); // показываем popup
  $('body').css('overflow', 'hidden'); // запретим скролл страницы
});

$('.popup-overlay .-closed').on('click', function(){ // при нажатии на кнопку "закрыть" в popup
  $('.popup-overlay').removeClass('-show'); // Спрячем popup
  $('.popup-overlay .content').html(''); // Удалим content в popup
  $('body').css('overflow', body_overflow); // вернём скролл странице
  
});
.cards {
  display: flex;
  flex-wrap: wrap;
  width: 270px;
}

.card {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
  width: 130px;
  height: 150px;
  background: gray;
  padding: 5px 0;
  box-sizing: border-box;
}

.card:nth-child(odd) {
  margin-right: 10px;
}

.card:nth-last-child(n+3) {
  margin-bottom: 10px;
}

.card .go-popup {
  display: none;
}

.card .read {
  cursor: pointer;
  border: 1px solid #333;
  padding: 5px;
  box-sizing: border-box;
}

/*  */

.popup-overlay {
  display: none;
  justify-content: center;
  align-items: center;
  width: 100%;
  height: 100%;
  background: rgb(0,0,0,.25);
  overflow: hidden;
  position: fixed;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 9999;
}

.popup-overlay.-show {
  display: flex;
}

.popup-overlay .popup {
  display: block;
  width: 300px;
  max-height: 90vh;
  overflow: hidden auto;
  background: #fff;
  padding: 5px;
  box-sizing: border-box;
}

.popup-overlay .popup .-closed  {
  display: block;
  width: 105px;
  border: 1px solid #333;
  margin: 5px auto 0;
  padding: 5px;
  box-sizing: border-box;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="cards">
  <div class="card">
    <div class="title">Новость 1</div>
    <div class="read">Подробнее</div>
    <!-- создаёте отдельный блок с описанием -->
    <div class="go-popup">Описание для новости 1</div>
  </div>

  <div class="card">
    <div class="title">Новость 2</div>
    <div class="read">Подробнее</div>
    <div class="go-popup">Описание для новости 2</div>
  </div>

  <div class="card">
    <div class="title">Новость 3</div>
    <div class="read">Подробнее</div>
    <div class="go-popup">Описание для новости 3</div>
  </div>
  
  <div class="card">
    <div class="title">Новость 4</div>
    <div class="read">Подробнее</div>
    <div class="go-popup">Описание для новости 4</div>
  </div>
</div>

<!-- Один popup -->
<div class="popup-overlay">
  <div class="popup">
    <div class="content"></div>
    <div class="-closed">Закрыть окно</div>
  </div>
</div>

В идеале же, если информация в popup будет подтягиваться через AJAX.

→ Ссылка