Модальный загрузочный образ

#javascript #jquery #html #twitter-bootstrap #css

#javascript #jquery #HTML #twitter-bootstrap #css

Вопрос:

Кто-нибудь знает, как сделать этот пример из w3schools, но с 3 миниатюрами

Пока это мой код:

 <div class="row">
    <div class="col-md-4 ">

      <!-- Trigger the Modal -->
      <div class="polaroid">
        <img id="myImg" src="home-page-feature-thumbnail-image-front-featured-films-slider-2.jpg" alt="Caption1" width="auto;" height="auto;">

        <div class="info">
          <p style="color:#971604; font-weight:bold;">This is a text.</p>
          <h4>Caption 1</h4>
        </div>
      </div>

      <!-- The Modal -->
      <div id="myModal" class="modal">

        <!-- The Close Button -->
        <span class="close" >×</span>


        <!-- Modal Content (The Image) -->
        <img class="modal-content" id="img01" src="img.jpg">

        <!-- Modal Caption (Image Text) -->
        <div id="caption"></div>
      </div>
    </div>

    <div class="col-md-4">

      <!-- Trigger the Modal -->
      <div class="polaroid">
        <img id="myImg2" src="home-page-feature-thumbnail-image-front-featured-films-slider-4.jpg" alt="Caption2" width="auto;" height="auto;">
        <div class="info">
          <p style="color:#971604; font-weight:bold;">This is another text.</p>
          <h4>Caption 2</h4>
        </div>

      </div

      <!-- The Modal -->
      <div id="myModal" class="modal">

        <!-- The Close Button -->
        <span class="close" >×</span>

        <!-- Modal Content (The Image) -->
        <img class="modal-content" id="img02" src="img2.jpg">

        <!-- Modal Caption (Image Text) -->
        <div id="caption"></div>
      </div>
    </div>

    <div class="col-md-4">
      <!-- Trigger the Modal -->
       <div class="polaroid">
        <img id="myImg" src="home-page-feature-thumbnail-image-front-featured-films-slider-2.jpg" alt="Caption3" width="auto;" height="auto">

        <div class="info">
          <p style="color:#971604; font-weight:bold;">This is the 3rd text.</p>
          <h4>Caption 3</h4>
        </div>
      </div>

      <!-- The Modal -->
      <div id="myModal" class="modal">

        <!-- The Close Button -->
        <span class="close" onclick="document.getElementById('myModal').style.display='none'">amp;times;</span>

        <!-- Modal Content (The Image) -->
        <img class="modal-content" id="img03" src="img3.jpg">

        <!-- Modal Caption (Image Text) -->
        <div id="caption"></div>
      </div>
    </div>

  </div>
  

и это то, что у меня есть для моего javascript

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

// Get the image and insert it inside the modal - use its "alt" text as a caption
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;
}

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
   modal.style.display = "none";
}
  

это то, что находится в моем файле css:

 /* Style the Image Used to Trigger the Modal */

div.polaroid {
  width: 100%;
  background-color: white;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  margin-bottom: 25px;
}

div.info {
 padding: 10px 20px;
} 

/* 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 of Modal Image (Image Text) - Same Width as the Image */
 #caption {
   margin: auto;
   display: block;
   width: 80%;
   max-width: 700px;
   text-align: center;
   color: #ccc;
   padding: 10px 0;
   height: 150px;
 }

  /* Add Animation - Zoom in the Modal */
  .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: 35px;
     right: 25px;
     color: #ffffff;
     font-size: 150px;
     transition: 0.3s;


     }

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

     /* 100% Image Width on Smaller Screens */
     @media only screen and (max-width: 700px){
        .modal-content {
            width: 100%;
         }
     }
  

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

Ответ №1:

Вам не нужно добавлять модальный для каждого изображения, достаточно одного модального. В вашем коде модальный работает только для первого изображения, потому что ваш js-код обрабатывает только первое изображение. Найдите ниже код, который работает для трех изображений.

  function  handleImageClick(c){
   var modal = document.getElementById('myModal');
   var modalImg = document.getElementById("modalImage");
   var captionText = document.getElementById("caption");
    modal.style.display = "block";
    modalImg.src = c.src;
    captionText.innerHTML = c.alt;
}  
 div.polaroid {
  width: 100%;
  background-color: white;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  margin-bottom: 25px;
}

div.info {
 padding: 10px 20px;
} 

/* 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 of Modal Image (Image Text) - Same Width as the Image */
 #caption {
   margin: auto;
   display: block;
   width: 80%;
   max-width: 700px;
   text-align: center;
   color: #ccc;
   padding: 10px 0;
   height: 150px;
 }

  /* Add Animation - Zoom in the Modal */
  .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: 35px;
     right: 25px;
     color: #ffffff;
     font-size: 150px;
     transition: 0.3s;


     }

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

     /* 100% Image Width on Smaller Screens */
     @media only screen and (max-width: 700px){
        .modal-content {
            width: 100%;
         }
     }  
 <div class="row">
		<div class="col-md-4 ">
			<div class="polaroid">
				<img id="myImg"   onClick="handleImageClick(this);" src="http://www.w3schools.com/howto/img_fjords.jpg" alt="Caption1" width="auto;" height="auto;">
				<div class="info">
					<p style="color:#971604; font-weight:bold;">This is a text.</p>
					<h4>Caption 1</h4>
				</div>
			</div>
     </div>

    <div class="col-md-4">
		<div class="polaroid">
			<img id="myImg2"  onClick="handleImageClick(this);"  src="http://www.w3schools.com/howto/img_fjords.jpg" alt="Caption2" width="auto;" height="auto;">
			<div class="info">
				<p style="color:#971604; font-weight:bold;">This is another text.</p>
				<h4>Caption 2</h4>
			</div>
		</div>
    </div>

    <div class="col-md-4">
       <div class="polaroid">
        <img id="myImg"   onClick="handleImageClick(this);" src="http://www.w3schools.com/howto/img_fjords.jpg" alt="Caption3" width="auto;" height="auto">

        <div class="info">
          <p style="color:#971604; font-weight:bold;">This is the 3rd text.</p>
          <h4>Caption 3</h4>
        </div>
      </div>
    </div>

  </div>
  
  <div id="myModal" class="modal">
        <!-- The Close Button -->
        <span class="close" onclick="document.getElementById('myModal').style.display='none'">amp;times;</span>

        <!-- Modal Content (The Image) -->
        <img class="modal-content" id="modalImage" src="">

        <!-- Modal Caption (Image Text) -->
        <div id="caption"></div>
 </div>  

Комментарии:

1. кстати, как мне это сделать, чтобы при нажатии на фотографию отображалось не изображение в миниатюре, а другое изображение. Как и в примере, на миниатюре это фотография природы, но как мне это сделать, чтобы при нажатии на нее появлялась фотография деревьев? что-то вроде этого? Спасибо!

2. Вы хотите каждый раз показывать одно и то же изображение, например, изображение дерева или разные изображения?

3. разные изображения для каждого эскиза. Например, что-то вроде этого: эскиз 1: природа (при нажатии: фотография дерева) Миниатюра 2: кошки (при нажатии: фотография собак) Миниатюра 3: дома (при нажатии на фотографию людей) что-то вроде этого? возможно ли это? Большое вам спасибо!

4. конечно, это возможно . Есть много способов добиться этого. один из них заключается в том, что вы можете поместить еще одно скрытое изображение чуть ниже каждого элемента эскиза изображения, и когда пользователь нажимает на эскиз, мы передаем текущий элемент в функцию handleImageClick, и вы получаете c.src и c.alt для текущего эскиза, здесь вместо c.src и c.alt вы можете получитьследующий скрытый дочерний элемент с использованием c.nextElementSibling.src и c.nextElementSibling.alt. Возможно, это не лучший способ. Лучший способ зависит от ваших фактических требований.

5. не могли бы вы помочь мне закодировать это? если это не слишком много хлопот! большое вам спасибо! в моем исходном коде у меня было скрытое изображение, верно?