web-dev-qa-db-fra.com

Comment utiliser bootstrap modal sur plusieurs images d'une même page sur un clic d'image?

J'ai environ 18 images sur la page que j'essaie d'afficher plus gros dans un modal en cliquant sur l'image, mais la première image ne s'affiche qu'à chaque fois.

J'ai essayé de parcourir le DOM avec $(this).find('img') et je l'ai essayé avec des enfants. J'ai également essayé de définir les images avec différents identifiants et de les définir en tant que variable.

Ma tentative actuelle était de définir le chemin de la petite image sur le même identifiant que le chemin de la plus grande image, puis d'utiliser find. Je n'ai que les deux premières images "configurées" pour le moment, car je ne peux pas le faire fonctionner correctement pour le moment.

BTW, j'ai essayé d'autres méthodes de zoom avant et popovers et plug-ins sans succès non plus, c'est le plus proche que je suis venu à quelque chose qui fonctionne.

Remarque: Il y a une autre question qui montre à peu près le même problème, mais la réponse n'a pas fonctionné pour moi.

<img  height="100" width="80" id="1" data-toggle="modal" data-target="#myModal" data-dismiss="modal" src='~/Content/MyPics/TextDollarPart1.JPG' alt='Text dollar code part one.' />  
<div id="myModal" class="modal fade" >
    <div class=" modal-lg">
        <div class="modal-content">
            <div class="modal-body">
                <img id="1"src="~/Content/MyPics/TextDollarPart1.JPG" class="img-responsive" height="1500" width="1000">
            </div>
        </div>
    </div>
</div>   
<img  height="100" width="80" id="2" data-toggle="modal" data-target="#myModal" data-dismiss="modal" src="~/Content/MyPics/TextDollarPart2.JPG" alt="Text dollar code part two." />
<div id="myModal" class="modal fade">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-body">
                <img id="2" src="~/Content/MyPics/TextDollarPart2.JPG" class="img-responsive" height="1500" width="1000">
            </div>
        </div>
    </div>
</div>

Scénario

$(document).ready(function () {       
    $('img').on('click', function () {
        var picID = $(this).attr('id');
         $(this).find('picID');
        $('picID').modal('toggle');      
    });
});
3
Kirstin Walsh

Vous êtes très proche de votre objectif, vous avez 2 images

<img height="100" width="80" id="1" data-toggle="modal" data-target="#myModal" src='http://tympanus.net/Tutorials/CaptionHoverEffects/images/1.png' alt='Text dollar code part one.' />
<img height="100" width="80" id="2" data-toggle="modal" data-target="#myModal" src='http://tympanus.net/Tutorials/CaptionHoverEffects/images/2.png' alt='Text dollar code part one.' />

Un modal

<div id="myModal" class="modal fade" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body">
                <img class="img-responsive" src="" />
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

Si vous souhaitez afficher une image en mode modal avec votre approche à l'aide de la fonction click

$(document).ready(function () {
    $('img').on('click', function () {
        var image = $(this).attr('src');
        $('#myModal').on('show.bs.modal', function () {
            $(".img-responsive").attr("src", image);
        });
    });
});

Fiddle


Ou vous pouvez utiliser bootstrap modal event function uniquement, une approche moins compliquée et meilleure (solution recommandée)

$(document).ready(function () {
        $('#myModal').on('show.bs.modal', function (e) {
            var image = $(e.relatedTarget).attr('src');
            $(".img-responsive").attr("src", image);
        });
});

Fiddle

15
Shehary

Vous voulez dire que vous avez 18 images, lorsque vous cliquez sur une image, le site Web s'ouvre pour afficher une image plus grande?

Alors, pourquoi ne pas utiliser un autre plugin tel que Nivo lightbox , qui vous permet d’ouvrir une fenêtre contextuelle afin d’afficher une image, et de mettre toute votre image dans une galerie lorsqu’elle est ouverte

1
Phuong

J'apprends l'anglais, alors je ne suis pas sûr de bien comprendre, mais si vous le souhaitez, vous pouvez afficher différentes images dans un mode en cliquant sur chaque vignette. Je pense que ce code peut vous aider. 

voici un exemple de Jsfiddle: Comment afficher plusieurs images sur le même modal

Et le code:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="bootstrap.css">
    <script type="text/javascript" src="jquery-1.11.2.js"></script>
    <script type="text/javascript" src="bootstrap.js"></script>
    <style type="text/css">
      .my-img a {
        display: inline-block;
        margin: 10px;
        border: 2px solid #CCC;
      }
      .my-img a:hover {
        border: 2px solid #45AFFF;
      }    
      .modal-lg {
        width: 86%;
      }
      .modal-body {
        overflow: auto;
        max-height: auto;
      }
    </style>
</head>
<body>

<div class="container">
  <h2>Modal Example</h2>
  <!-- Trigger the modal with a button -->
  <div class="row">
    <div class="col-xs-12 my-img">
      <a href="#" id="link1" data-toggle="modal" data-target="#myModal">
        <img src="1.png" id="img1" class="img-responsive" width="250px">
      </a>
      <a href="#" id="link1" data-toggle="modal" data-target="#myModal">
        <img src="2.png" id="img2" class="img-responsive" width="250px">
      </a>
      <a href="#" id="link1" data-toggle="modal" data-target="#myModal">
        <img src="3.png" id="img3" class="img-responsive" width="250px">
      </a>
      <a href="#" id="link1" data-toggle="modal" data-target="#myModal">
        <img src="4.png" id="img4" class="img-responsive" width="250px">
      </a>          
  </div>  

  <!-- Modal -->
  <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog modal-lg">

      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">your image title here (can be dynamic) </h4>
        </div>
        <div class="modal-body" id="showImg">

        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>

    </div>
  </div>

</div>
<script type="text/javascript">
      $(document).ready(function() {
        $('img').on('click', function() {
          $("#showImg").empty();
          var image = $(this).attr("src");
          $("#showImg").append("<img class='img-responsive' src='" + image + "' />")
          //alert(image);
        })
      });
</script>

</body>
</html>
0
Quethzel

Il fonctionne bien pour le chemin d’image normal, mais j’ai l’image base64, donc ne fonctionne pas avec ce javascript.

<img src="<?php echo 'data:image/'.$imageFileType.';base64,'.$fetch_expance['expance_image'];?>" style="cursor: pointer;" data-toggle="modal" data-target="#myModal" width="100px" height="100px" /><br>
0
Manish Patel