Django javascript модальное с несколькими изображениями - PullRequest
0 голосов
/ 05 апреля 2020

Итак, я работаю над проектом Django, веб-сайтом портфолио. И я начал делать несколько карт для демонстрации: Cards

Я извлекаю все данные из Django базы данных и использую bootstrap для внешнего интерфейса:

  {% for project in projects %}

        <div class="cardies">
            <div class="card" style="width: 18rem;">
                <img src="{{ project.image.url }}" class="card-img-top img-fluid" id="myImg" alt="{{ project.description }}">
                    <div class="card-body">
                        <h6 class="card-subtitle mb-2 text-muted">{{ project.date }}</h5>
                        <h5 class="card-title">{{ project.title}}</h6>
                       <!-- <p class="card-text">{{ project.description}}</p>-->
                    </div>
            </div>
        </div>

    {% endfor %}

И у меня есть локальный стиль css только для отображения этих карточек.

Теперь я хотел создать модальное изображение, где, когда я нажимаю на любое из этих изображений, они увеличиваются, как показано: enter image description here

И, как вы можете видеть, это работает, но только для первого изображения. Я использовал javascript для этого, вот код:

HTML:

<div id="myModal" class="modal">
    <span class="close">&times;</span>
    <img class="modal-content" id="img01">
    <div id="caption"></div>
  </div>

CSS:

#myImg {
    border-radius: 5px;
    cursor: pointer;
    transition: 0.3s;
  }

  #myImg:hover {opacity: 0.7;}

  /* The Modal (background) */
  .modal {
    display: none; /* Hidden by default */
    position: fixed; /* Stay in place */
    z-index: 1; /* Sit on top */
    padding-top: 100px; /* Location of the box */
    left: 0;
    top: 0;
    width: 100%; /* Full width */
    height: 100%; /* Full height */
    overflow: auto; /* Enable scroll if needed */
    background-color: rgb(0,0,0); /* Fallback color */
    background-color: rgba(0,0,0,0.9); /* Black w/ opacity */
  }

  /* Modal Content (image) */
  .modal-content {
    margin: auto;
    display: block;
    width: 80%;
    max-width: 700px;
  }


  #caption {
    margin: auto;
    display: block;
    width: 80%;
    max-width: 700px;
    text-align: center;
    color: #ccc;
    padding: 10px 0;
    height: 150px;
  }

  /* Add Animation */
  .modal-content, #caption {  
    -webkit-animation-name: zoom;
    -webkit-animation-duration: 0.6s;
    animation-name: zoom;
    animation-duration: 0.6s;
  }

  @-webkit-keyframes zoom {
    from {-webkit-transform:scale(0)} 
    to {-webkit-transform:scale(1)}
  }

  @keyframes zoom {
    from {transform:scale(0)} 
    to {transform:scale(1)}
  }

  /* The Close Button */
  .close {
    position: absolute;
    top: 15px;
    right: 35px;
    color: #f1f1f1;
    font-size: 40px;
    font-weight: bold;
    transition: 0.3s;
  }

  .close:hover,
  .close:focus {
    color: #bbb;
    text-decoration: none;
    cursor: pointer;
  }

JS:

    var modal = document.getElementById("myModal");

    var img = document.getElementById("myImg");
    var modalImg = document.getElementById("img01");
    var captionText = document.getElementById("caption");
    img.onclick = function(){
      modal.style.display = "block";
      modalImg.src = this.src;
      captionText.innerHTML = this.alt;
    }


    var span = document.getElementsByClassName("close")[0];


    span.onclick = function() { 
      modal.style.display = "none";
    }

Теперь, грубо говоря, я знаю, в чем проблема, Это только получение первого изображения, так как все они имеют одинаковый идентификатор, но я не знаю, как сделать так, чтобы он работал с каждое изображение, не имеет значения, сколько их.

Я был бы очень признателен, если бы кто-нибудь помог.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...