我对 Jquery 很陌生,我有以下问题。
我写了一个函数来调整图像大小,同时保持纵横比。为了更具可读性,我在这个版本中有一些比需要更多的“如果”。html结构是这样的。
<div class="post">
<div class="date"></div>
<div class="thumbnail">
<img class="img-thumb" />
</div>
<div class="post-body">
<p>...</p>
<img />
<p>...</p>
</div>
</div>
对于调整大小(我还通过添加一些填充来使图像居中。我认为我对代码的那部分没有错误。)
$(window).load(function() {
var parentWidth = 250;//max width. In the real script i get the parent width inside the each but for the example a static value is ok
var parentHeight = 196;//max height
$('.img-thumb').each(function () {
var img=$(this);
var width = img.width(); //image width
var height = img.height(); //image height
var aspect = width/height;
var wide = width/parentWidth;
var tall = height/parentHeight;
if(width > parentWidth) {
if (wide > tall) {
width = parseInt(parentWidth,10);
height = parseInt(parentHeight/aspect,10);
}
}
if(height > parentHeight) {
if (tall > wide) {
height = parseInt(parentHeight,10);
width = parseInt(parentWidth*aspect,10);
}
}
margin_top = parseInt((parentHeight - height) / 2,10);
margin_left = parseInt((parentWidth - width ) / 2,10);
img.css({'margin-top' :margin_top + 'px',
'margin-left':margin_left + 'px',
'height' :height + 'px',
'width' :width + 'px'
});
});
});
这是我的问题。我不明白负载是如何工作的。我是说。这将起作用,但仅在加载所有图像时才有效。但它有两个问题。第一个是它必须等待所有加载,第二个是用户将看到调整大小,所以我首先必须隐藏图像并使用 show() 显示它们。我可以在 css 中做到这一点,但是当 javascript 被禁用时,它们仍然会被隐藏,所以我更喜欢在 jquery 中做到这一点。
我可以在那个之前运行第二个 .each 并将它们全部隐藏,但我想第二次去 dom 为同一件事运行 each 并不是最好的解决方案。那么负载究竟是如何工作的呢?
例如,如果我这样做:
$('.img-thumb').each(function () {
var parentWidth = 250;//max width. In the real script i get the parent width inside the each but for the example a static value is ok
var parentHeight = 196;//max height
var img=$(this);
img.hide();
img.load(function() {
var width = img.width(); //image width
var height = img.height(); //image height
var aspect = width/height;
var wide = width/parentWidth;
var tall = height/parentHeight;
if(width > parentWidth) {
if (wide > tall) {
width = parseInt(parentWidth,10);
height = parseInt(parentHeight/aspect,10);
}
}
if(height > parentHeight) {
if (tall > wide) {
height = parseInt(parentHeight,10);
width = parseInt(parentWidth*aspect,10);
}
}
margin_top = parseInt((parentHeight - height) / 2,10);
margin_left = parseInt((parentWidth - width ) / 2,10);
img.css({'margin-top' :margin_top + 'px',
'margin-left':margin_left + 'px',
'height' :height + 'px',
'width' :width + 'px'
}).show();
});
});
它不起作用。我的意思是我仍然可以看到调整大小。我猜原因是在加载第一个图像之前不会执行每个循环的第二部分。那么我怎样才能告诉 jquery 执行加载代码的 outdise 呢?我需要两个 .each 吗?