初始加载时,SimpleModal的大小不正确

时间:2011-03-09 03:11:39

标签: c# .net jquery simplemodal

我目前有一个使用simplemodal的通用图像加载器。

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

我第一次点击 - 模态窗口不正确。它显示为图像后面的一个小窗口。

第二次点击按钮 - 模态是正确的。根据渲染的图像,模态的大小是正确的,图像在模态框内。

我没有选择使用图像创建div并设置display none属性。

任何见解?

3 个答案:

答案 0 :(得分:1)

从我所说的加载图像的方式来看,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;
});

这两个都应该有用。如果您有任何问题,请告诉我。

答案 1 :(得分:1)

此代码将使用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();
    }
  });
从SimpleModal的对话框样式修改的

css:

/* 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;}

答案 2 :(得分:0)

如果您使用的是:SimpleModal,请尝试在插件选项中将autoResize设置为'true',如下所示:

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

还可以尝试将代码放入.ready()window.onload

祝你好运,也可以尝试其他模态插件,例如FancyBox