即使放在$(window).load中,我也得到$(image).width()== 0

时间:2012-01-19 15:59:48

标签: javascript jquery image resize window

我想调整大于窗口的图像大小,但是当我尝试获取图像大小时,我一直保持0宽度和高度。我读到某处可能是因为图像不一定是在(文档)上加载的.ready所以图像函数应该在(window).load下,但它没用。当涉及到jquery和javascript时,我是一个真正的新手,所以我可能做错了。

这是我的javascript文件的外观:

//<!--
$(document).ready(function(){
    ... 
});

$(window).load(function () {

    $(".lightbox img").each(function() {

        var width = $(this).width();
        var max_width = $(window).width()-30;
        var height = $(this).height();          
        var max_height = $(window).height()-30;

        if(width > max_width || height > max_height) {
            if(height > width) {
                height = max_height;
                width = Math.ceil(width / height * max_height);
            } else {
                width = max_width;
                height = Math.ceil(height / width * max_width);
            }
        }

        $(this).attr("width",width);
        $(this).attr("height",height);

    });
});

//-->

提前致谢。

3 个答案:

答案 0 :(得分:0)

尝试使用$(this).css("width")代替attr

答案 1 :(得分:0)

看看this project在加载图片时提供回调。

你可能没有维度的另一个原因是一个不可见的元素(父或自我)。

答案 2 :(得分:0)

当窗口加载时,图像尚未加载。在完全加载之前,JavaScript无法获取图像的尺寸,在此之前,您获得的计算值为零。

考虑到这一点,重复循环可能有所帮助。 (警告:尚未测试)

var width = 0;
while (!width) {
    width = $(this).width();
}

注意无限循环。