В Bootstrap откройте Увеличить изображение в модальном режиме

Как мне open / enlarge сделать изображение в модальном окне, используя jquery/js и не атрибуты данных?

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

Я старался:-

<a href="/myImage.png" id="pop">
    <img src="/myImage.png" style="width: 400px; height: 264px;">
    Click to Enlarge
</a>

jQuery :-

$("#pop").on("click", function() {
   $(this).modal();
});

Нужно ли мне добавлять информацию в jquery, чтобы передать источник изображения для отображения в модальном окне?

Спасибо!!!


person Jibes    schedule 29.07.2014    source источник
comment
во всплывающем окне установите модальный источник изображения = источник изображения, который они хотят увеличить   -  person Jordan.J.D    schedule 29.07.2014
comment
@JordanD Спасибо за ответ! Как именно это будет выглядеть в коде?   -  person Jibes    schedule 29.07.2014
comment
Каждый раз, когда пользователь вставляет изображение в редактор контента, вам нужно, чтобы изображение отображалось, когда пользователь щелкает изображение, вставленное в редактор?   -  person martinezjc    schedule 29.07.2014
comment
@martinezjc Да, используя систему управления контентом и стремясь иметь эту функцию каждый раз, когда изображение вставляется на страницу через редактор контента.   -  person Jibes    schedule 29.07.2014
comment
Есть ли способ добиться этого без JQuery и JS? Только с помощью CSS?   -  person Paula    schedule 17.02.2021


Ответы (7)


Вы можете попробовать этот код, если используете bootstrap 3:

HTML

<a href="#" id="pop">
    <img id="imageresource" src="http://patyshibuya.com.br/wp-content/uploads/2014/04/04.jpg" style="width: 400px; height: 264px;">
    Click to Enlarge
</a>

<!-- Creates the bootstrap modal where the image will appear -->
<div class="modal fade" id="imagemodal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="myModalLabel">Image preview</h4>
      </div>
      <div class="modal-body">
        <img src="" id="imagepreview" style="width: 400px; height: 264px;" >
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>

JavaScript:

$("#pop").on("click", function() {
   $('#imagepreview').attr('src', $('#imageresource').attr('src')); // here asign the image to the modal when the user click the enlarge link
   $('#imagemodal').modal('show'); // imagemodal is the id attribute assigned to the bootstrap modal, then i use the show function
});

Это рабочая скрипта. Надеюсь это поможет :)

person martinezjc    schedule 29.07.2014
comment
Спасибо, это сработало! Но по какой-то причине, когда у меня есть несколько изображений на странице, модальное окно открывается только для первого изображения. Остальные изображения не открывают модальное окно, а только переходят к началу страницы. Есть ли что-то, что мне не хватает? Спасибо!!! - person Jibes; 30.07.2014
comment
Я понял, почему другие изображения не открываются в модальном режиме, потому что идентификатор pop уникален, поэтому я изменил его на класс. Единственная проблема сейчас заключается в том, что источник изображения в других модальных окнах показывает первое изображение, а не изображение, по которому щелкнули! - person Jibes; 30.07.2014
comment
Замените $('##imagepreview').attr('src', $('.pop img').attr('src')); на это: $('.imagepreview').attr('src', $('.pop img').attr('src')); не забудьте изменить id для атрибута класса для imagepreview в модальном окне и удалить лишний # в $('##imagemodal').modal('show'); должно выглядеть так $('#imagemodal').modal('show'); - person martinezjc; 30.07.2014
comment
Привет! Я создал обновленный пример скрипта, чтобы показать вам, что я имею в виду здесь jsfiddle.net/6CR2H Я пытаюсь следовать ваши комментарии, чтобы добавить к скрипке, но не уверен, что она работает Спасибо! - person Jibes; 30.07.2014
comment
Я сделал обновление, теперь работает, проблема заключалась в том, что .pop img всегда будет брать первое изображение с назначенным классом .pop, я только что сделал $('.imagepreview').attr('src', $(this).find('img').attr('src'));, чтобы взять фактическое изображение (<img>) внутри текущего тега <a> и назначить атрибуту изображения src внутри модального окна. Пожалуйста, отметьте мой ответ как решение. Вот ваша скрипка теперь работает jsfiddle.net/6CR2H/1 :) - person martinezjc; 30.07.2014
comment
Вы настоящий спаситель! Спасибо, что нашли время помочь мне, очень щедро с вашей стороны! - person Jibes; 30.07.2014
comment
Большое вам спасибо, наконец, это помогло мне показать эффект светового короба, но после того, как модель открытого макета сайта используется для перехода вправо и близко к левому, но это исправлено, но можем ли мы взять фактическое изображение (<img>) внутри текущего <div> вместо <a>, например это? - person Shaiju T; 25.06.2015
comment
Вы имеете в виду запустить событие из изображения, а не из ссылки? или запустить событие из div, содержащего изображение @stom? - person martinezjc; 31.08.2015
comment
@martinezjc, да, можете ли вы показать оба примера, я имею в виду запуск события из изображения и запуск события из div, содержащего изображение? - person Shaiju T; 01.09.2015
comment
@stom идея в основном такая же. Событие клика работает на основе атрибута элемента class, а не в теге html <a>. Вот скрипка....jsfiddle.net/oLwzepfc - person martinezjc; 01.09.2015
comment
Чтобы изменить размер модального окна после того, как изображение было загружено, добавьте к изображению обработчик «onload», например: ', (this.width + 32) + 'px')› - person pizzamonster; 07.03.2019

Я немного изменил его, но все еще не могу сделать несколько вещей.

Я добавил, что нажав на него, он закроется — это было просто, но очень функционально.

 <div class="modal-dialog" data-dismiss="modal">

Мне также нужно разное описание под каждой фотографией. Я добавил описание в нижний колонтитул, чтобы показать, что мне нужно. Он должен меняться с каждой фотографией.

HTML

<div class="modal fade" id="imagemodal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog" data-dismiss="modal">
      <div class="modal-content"  >              
        <div class="modal-body">
          <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
             <img src="" class="imagepreview" style="width: 100%;" >
        </div> 
     <div class="modal-footer">
       <div class="col-xs-12">
           <p class="text-left">1. line of description<br>2. line of description <br>3. line of description</p>
       </div>
     </div>         
   </div>
 </div>

JavaScript:

$(function() {
    $('.pop').on('click', function() {
        $('.imagepreview').attr('src', $(this).find('img').attr('src'));
        $('#imagemodal').modal('show');   
    });     
});

Также было бы неплохо, если бы это окно открывалось только на 100% экрана. Здесь изображение внутри с описанием имеет более 100% и становится прокручиваемым ... и если экран намного больше, чем изображения, он должен останавливаться только на исходном размере. напр. 900 px и не больше по высоте.

http://jsfiddle.net/2ve4hbmm/

person Tassak    schedule 13.04.2015

Этот плагин отлично работает для меня.

Плагин лайтбокса Bootstrap 3

person Justin    schedule 07.08.2015

Я знаю, что ваш вопрос помечен как boostrap-modal (хотя вы и не упомянули о Bootstrap), но мне понравился простой способ W3.CSS решил эту проблему, и я думаю, что хорошо поделиться ею.

  <img src="/myImage.png" style="width:30%;cursor:zoom-in"
  onclick="document.getElementById('modal01').style.display='block'">

  <div id="modal01" class="w3-modal" onclick="this.style.display='none'">
    <div class="w3-modal-content w3-animate-zoom">
      <img src="/myImage.png" style="width:100%">
    </div>
  </div>

Я даю вам ссылку на модальное изображение W3School, чтобы увидеть заголовки, чтобы заставить W3.CSS работать.

person Leopoldo Sanczyk    schedule 26.03.2019

Итак, я собрал очень грубый модальный модуль в jsfiddle, чтобы вы могли почерпнуть из него подсказки.

JSFiddle

$("#pop").on("click", function(e) {
  // e.preventDefault() this is stopping the redirect to the image its self
  e.preventDefault();
  // #the-modal is the img tag that I use as the modal.
  $('#the-modal').modal('toggle');
});

Часть, которую вам не хватает, — это скрытое модальное окно, которое вы хотите отображать при нажатии на ссылку. В примере я использовал второе изображение в качестве модального окна и добавил классы Bootstap.

person Corey Trombley    schedule 29.07.2014

CSS:

img.modal-img {
  cursor: pointer;
  transition: 0.3s;
}
img.modal-img:hover {
  opacity: 0.7;
}
.img-modal {
  display: none;
  position: fixed;
  z-index: 99999;
  padding-top: 100px;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgba(0,0,0,0.9);
}
.img-modal img {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700%;
}
.img-modal div {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700px;
  text-align: center;
  color: #ccc;
  padding: 10px 0;
  height: 150px;
}
.img-modal img, .img-modal div {
  animation: zoom 0.6s;
}
.img-modal span {
  position: absolute;
  top: 15px;
  right: 35px;
  color: #f1f1f1;
  font-size: 40px;
  font-weight: bold;
  transition: 0.3s;
  cursor: pointer;
}
@media only screen and (max-width: 700px) {
  .img-modal img {
    width: 100%;
  }
}
@keyframes zoom {
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}

Javascript:

$('img.modal-img').each(function() {
    var modal = $('<div class="img-modal"><span>&times;</span><img /><div></div></div>');
    modal.find('img').attr('src', $(this).attr('src'));
    if($(this).attr('alt'))
      modal.find('div').text($(this).attr('alt'));
    $(this).after(modal);
    modal = $(this).next();
    $(this).click(function(event) {
      modal.show(300);
      modal.find('span').show(0.3);
    });
    modal.find('span').click(function(event) {
      modal.hide(300);
    });
  });
  $(document).keyup(function(event) {
    if(event.which==27)
      $('.img-modal>span').click();
  });
img.modal-img {
  cursor: pointer;
  transition: 0.3s;
}
img.modal-img:hover {
  opacity: 0.7;
}
.img-modal {
  display: none;
  position: fixed;
  z-index: 99999;
  padding-top: 100px;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgba(0,0,0,0.9);
}
.img-modal img {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700%;
}
.img-modal div {
  margin: auto;
  display: block;
  width: 80%;
  max-width: 700px;
  text-align: center;
  color: #ccc;
  padding: 10px 0;
  height: 150px;
}
.img-modal img, .img-modal div {
  animation: zoom 0.6s;
}
.img-modal span {
  position: absolute;
  top: 15px;
  right: 35px;
  color: #f1f1f1;
  font-size: 40px;
  font-weight: bold;
  transition: 0.3s;
  cursor: pointer;
}
@media only screen and (max-width: 700px) {
  .img-modal img {
    width: 100%;
  }
}
@keyframes zoom {
  0% {
    transform: scale(0);
  }
  100% {
    transform: scale(1);
  }
}
Javascript:

$('img.modal-img').each(function() {
    var modal = $('<div class="img-modal"><span>&times;</span><img /><div></div></div>');
    modal.find('img').attr('src', $(this).attr('src'));
    if($(this).attr('alt'))
      modal.find('div').text($(this).attr('alt'));
    $(this).after(modal);
    modal = $(this).next();
    $(this).click(function(event) {
      modal.show(300);
      modal.find('span').show(0.3);
    });
    modal.find('span').click(function(event) {
      modal.hide(300);
    });
  });
  $(document).keyup(function(event) {
    if(event.which==27)
      $('.img-modal>span').click();
  });

HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<img src="http://www.google.com/favicon.ico" class="modal-img">

person RatajS    schedule 08.11.2016
comment
стиль = дисплей: встроенный блок - person سیدرسول میرعظیمی; 02.02.2019

Два выше это не работает.

Кнопка редактирования таблицы:

<a data-toggle="modal" type="edit" id="{{$b->id}}" data-id="{{$b->id}}"  data-target="#form_edit_masterbank" data-bank_nama="{{ $b->bank_nama }}" data-bank_accnama="{{ $b->bank_accnama }}" data-bank_accnum="{{ $b->bank_accnum }}" data-active="{{ $b->active }}" data-logobank="{{asset('components/images/user/masterbank/')}}/{{$b->images}}" href="#"  class="edit edit-masterbank"   ><i class="fa fa-edit" ></i></a>                                               

а затем в JavaScript:

$('.imagepreview555').attr('src', logobank);

а затем в HTML:

<img src="" class="imagepreview555"  style="width: 100%;" />

Не бежит.

person fdyahk    schedule 24.05.2016