Visualizzatore immagini

di il
1 risposte

Visualizzatore immagini

Salve a tutti, di solito non mi rivolgo mai ai forum, cerco di dare una mano dove posso, ma questa volta mi sono arreso, non essendo pratico di jscript devo cercare un aiuto.
Sto cercando di scrivere in bootstrap un visualizzatore di immagini, prese in random da una cartella con uno script in PHP.
Cliccando sopra la foto deve aprire un popup modal e ingrandirla, con la prima funziona bene, ma solo con quella, dalla seconda in poi non riesco proprio.
Provo a postare il codice che ho reso essenziale, in modo che con un copia/incolla funzioni, spero in un vs. aiuto perchè mi piace questa soluzione ma mi sta facendo perdere tempo. Grazie.

<?php
$nome =array('slide-ss/autunno.JPG' , 'slide-ss/al teatro.JPG' , 'slide-ss/candelieri 2.JPG' ) ;
?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {font-family: Arial, Helvetica, sans-serif;}

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


.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)}
}


.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;
}


@media only screen and (max-width: 700px){
  .modal-content {
    width: 100%;
  }
}
</style>
<!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" rel="stylesheet">

  <!-- Vendor CSS Files -->
  <link href="assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

</head>
<body>

<h2>Prova visualizzatore immagini </h2>


<section class="property-grid grid">
      <div class="container">
  
            
          <div class="row">
                            <div class="col-md-4">
                                    <div class="card mb-4 box-shadow">
                                      <img  id="myImg" class="card-img-top" src="<?=$nome[0];?>" alt="<?=$nome[0];?>" title="<?=$nome[0];?>">
                                      <div class="card-body">
                                        <p class="card-text">immagine numero 0.</p>
                                      </div>
                                    </div>
                               </div>
              <div class="col-md-4">
                                    <div class="card mb-4 box-shadow">
                                      <img  id="myImg" class="card-img-top" src="<?=$nome[1];?>" alt="<?=$nome[1];?>" title="<?=$nome[1];?>">
                                      <div class="card-body">
                                        <p class="card-text">immagine numero 1.</p>
                                        
                                      </div>
                                    </div>
                               </div>
              <div class="col-md-4">
                                    <div class="card mb-4 box-shadow">
                                      <img  id="myImg" class="card-img-top" src="<?=$nome[2];?>" alt="<?=$nome[2];?>" title="<?=$nome[2];?>">
                                      <div class="card-body">
                                        <p class="card-text">immagine numero 2.</p>
                                        
                                      </div>
                                    </div>
                               </div>
             
              
          </div>          <!--  row -->
         
                                    <!-- The Modal -->
                                    <div id="myModal" class="modal">
                                          <span class="close">&times;</span>
                                                  <img class="modal-content" id="img01">
                                          <div id="caption"></div>
                                    </div>
                              
     
      </div>
</section>

<script>

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

//  prende l'immagine e la inserisce nel modal usando il tag "alt" ma modalImg mi rimane sempre ad 1 non so come gestirlo.
 
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";
}
</script>

</body>
</html>

1 Risposte

  • Re: Visualizzatore immagini

    Ciao marco,

    Ci sono un paio di errori strutturali nel codice:
    Gli ID sono fatti per essere assegnati ad un solo elemento nella pagina. Nel tuo caso, vedo che ci sono 3 elementi (le immagini) che condividono lo stesso ID. Nel codice, tu gli dici di prendere l'elemento con ID "myImg" e di assegnarli un evento quando viene fatto il click sulla foto. Però il codice ti darà solo il primo di quegli elementi, perché per lui l'ID deve essere univoco.

    Il mio consiglio è quello di utilizzare la classe per prendere i riferimenti alle immagini piuttosto che l'id. Dopo, dovresti fare un ciclo dove assegni l'evento "onclick" di ogni immagine.

    Qualcosa di simile:
    
    var images = document.getElementsByClassName("card-img-top");
    
    for (let img of images) {
    	img.onclick = function(){
    		modal.style.display = "block";
        		modalImg.src = this.src;
        		captionText.innerHTML = this.alt;
      	}
    }
    
    Considera che il codice qui sopra va considerato come un esempio. Cerca sempre di capire la logica del codice prima di applicarlo
Devi accedere o registrarti per scrivere nel forum
1 risposte