SimpleModal неправильно определяет размер при начальной загрузке

В настоящее время у меня есть общий загрузчик изображений, использующий simplemodal.

$('#clickMe').click(function(){
   $.modal("<div><img src=\"someimage.jpg\" /></div>");
});

Первый раз, когда я нажимаю - модальное окно неверно. Он отображается в виде небольшого окна за изображением.

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

У меня нет возможности создать div с изображением и установить свойство display none.

любое понимание?


person cesara    schedule 09.03.2011    source источник


Ответы (3)


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

У вас есть пара вариантов...

1) Добавьте обратный вызов onShow и вызовите $.modal.setContainerDimensions()

$('.clickMe').click(function () {
    $.modal("<div><img src=\"someimage.jpg\" /></div>", {
        onShow: function () {
            $.modal.setContainerDimensions();
        }
    });
    return false;
});

2) Сначала загрузите изображение, а затем покажите его:

$('.clickMe').click(function () {
    var img = new Image();
    img.onload = function () {
        $.modal("<div><img src=\"someimage.jpg\" /></div>");
    };
    img.src = 'someimage.jpg';
    return false;
});

Оба они должны работать. Дайте мне знать, если у вас возникнут проблемы.

person Eric Martin    schedule 09.03.2011
comment
Эрик, проблема определенно связана с тем, что изображение не загружалось до SimpleModal onShow. Оба этих решения работают. Я использовал ответ 2! Спасибо! - person cesara; 09.03.2011

этот код будет отображать изображение с плагином simplemodal. Я просто публикую здесь и добавляю небольшое описание.

HTML:

<table class="thumbnail">
  <tr>
   <td>
     <img src="/peopledesign/pictures/1319003385503_thumbnail.jpg" alt="">
   </td>
 </tr>
 <tr>
   <td>
     <a href="/peopledesign/pictures/1319003385503.jpg" class="pixLink">zoom out</a>
   </td>
 </tr>
</table>

<div id='pix'>
  <div class='header'><span>#springMessage('display.common.showpix')</span></div>
  <div class='pixframe'></div>
</div>

<script type="text/javascript">
    $(document).ready(
          function(){
            previewPix($('#project_item_scope a.pixLink,#project_basicinfo_scope a.pixLink'));
          }
  );
</script>

javascript, который получит свойство href ссылки и создаст изображение, добавляемое к pixframe div:

function previewPix(linkObj){
  linkObj.click(
    function (e) {
      e.preventDefault();
      var imgUrl=$(this).attr('href');
      var dialogDivObj=$('#pix');
      var pixDivObj=$('.pixframe',dialogDivObj);
      pixDivObj.empty(); //clean pix div
      var img = new Image();
      img.onload = function () {// first load image and fit its width and height
        var i=$(img);
        i.attr('id', 'pic-image');
        i.width(this.width);
        i.height(this.height);
        var outerHeight = i.outerHeight(true);
        var outerWidth = i.outerWidth(true);
        dialogDivObj.width(outerWidth);
        dialogDivObj.height(outerHeight+30);//30=container header's height
        pixDivObj.append(i);
        showPixDialog(
          dialogDivObj
        );
      }
      img.src=imgUrl;
    }
  );
}

function showPixDialog(dialogDivObj){
  dialogDivObj.modal({
    closeHTML: "<a href='#' title='Close' class='modal-close'>x</a>",
    position: ["10%"],
    overlayId: 'pix-overlay',
    containerId: 'pix-container',
    onShow:function(dialog){
      // important!
      // refere from:http://stackoverflow.com/questions/5240875/simplemodal-does-not-size-properly-with-initial-load
      dialog.modal.setContainerDimensions();
    }
  });

css, который изменил стиль диалога SimpleModal:

/* pix preview dialog */
#pix {display:none;}

/* Overlay */
#pix-overlay {background-color:#eee; cursor:default;}

/* Container */
#pix-container {
  height:auto;
  width:auto;
  font:12px/1.5 "Helvetica Neue",Arial,"Liberation Sans",FreeSans,sans-serif;
  text-align:left;
  background:#fff;
  border:1px solid #F90;
}
#pix-container .header {
  height:30px; line-height:30px; width:100%;
  /*background:url(../../images/simplemodal-header.gif) repeat-x; color:#fff;*/
  background-color:#F90;
  font-weight:bold;
}
#pix-container.header span {padding-left:8px;}
#pix-container.pixframe {
  text-align:center;
  vertical-align: middle;
  margin:0;
  padding:5px 5px 5px 5px;
}
#pix-container a.modal-close,
#pix-container a.modal-close:link,
#pix-container a.modal-close:active,
#pix-container a.modal-close:visited {
  text-decoration:none;
  font-weight:bold;
  position:absolute;
  right:10px;
  top:2px;
  color:#fff;
}
#pix-container a.modal-close:hover {color:#ccc;}
person cleverpig    schedule 20.10.2011

Если вы используете это: SimpleModal, попробуйте установить autoResize на 'true' в параметрах плагина, например так:

$("#sample").modal({
  autoResize:true
 });

Также попробуйте поместить свой код в .ready() или window.onload

Удачи, также, возможно, попробуйте другие модальные плагины, такие как FancyBox.

person vladikoff    schedule 09.03.2011
comment
Я попробовал свойство autoResize и все еще имею ту же проблему. Спасибо за отзыв! - person cesara; 09.03.2011