我在jQuery(document).ready()和jQuery(window).load()上触发一个函数。两者功能相同。它应该激发图像大小调整脚本。
但是,有时,当服务器响应缓慢时,在加载页面时脚本根本不会触发。
我已经有这个问题已经有一段时间了,而且,也许这有点过分,但到现在为止,我在文档就绪和窗口加载中调用了如下所示的函数:
jQuery('img', '.background').each(function(){
jQuery(this).load(function(){
jQuery(this).resizeImage();
});
});
它调用的函数是:
jQuery.fn.resizeImage = function() {
console.log('fired');
var bgImg = jQuery(this);
/* get img sizes */
var imgwidth = bgImg.width();
var imgheight = bgImg.height();
/* get window sizes */
var winwidth = jQuery(window).width();
var winheight = jQuery(window).height();
/* get the ratio, checks wether window is bigger or smaller than the image */
var widthratio = winwidth / imgwidth;
var heightratio = winheight / imgheight;
/* checks the difference */
var widthdiff = heightratio * imgwidth;
var heightdiff = widthratio * imgheight;
/* if you want the entire image to always fit the screen, change the > to < */
if(heightdiff>winheight) {
bgImg.css({
width: winwidth+'px',
height: heightdiff+'px',
marginLeft: '-'+winwidth/2+'px'
});
} else {
bgImg.css({
width: widthdiff+'px',
height: winheight+'px',
marginLeft: '-'+widthdiff/2+'px'
});
}
};
使用console.log,我发现该功能根本不会触发。
有人能指出正确的方向,为什么这可能不起作用?
答案 0 :(得分:0)
猜猜你错过了使用this
jQuery('img', '.background').each(function(){
var $self = $(this);
$self.load(function(){
$self.resizeImage();
});
});
答案 1 :(得分:0)
自己解决了。
问题如下:
jQuery(window).load(function(){
jQuery('img', '.background').each(function(){
jQuery(this).load(function(){
jQuery(this).resizeImage();
});
});
});
由于双重加载(jQuery(window).load和jQuery(this).load)代码根本没有执行。由于加载窗口时,图像也已加载。