2012-01-19 43 views
3

我想調整大於窗口大小的圖像,但當我嘗試獲取圖像大小。我在某處讀到這可能是因爲圖像不一定在(document).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); 

    }); 
}); 

//--> 

感謝。

+0

這是在腳本標籤在頁面的頂部? – Jivings

回答

0

看看this project圖像時已加載,提供了一個回調。

你可能沒有獲得維度的另一個原因是一個不可見的元素(父母或自我)。

+0

是的,它是一個不可見的元素(它在事件後變得可見)。儘管這很合理,但我沒有想過這個。現在我在元素變得可見並且可以工作之後得到尺寸,謝謝! – Sandra

+0

太棒了!高興地幫助:) –

0

嘗試$(this).css("width"),而不是attr

0

當窗口加載時,圖像尚未加載。在加載完完全之前,JavaScript無法獲取圖片的尺寸,並且在此之前,您會得到零計算值。

考慮到這一點,重複循環可能會有所幫助。 (警告:未經測試)

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

請注意無限循環。

+0

這不會實際上停止加載的圖像?我真的不建議像這樣使用'while'循環。爲什麼不使用'$(this).on(「load」,...);'?圖像也有一個'load'事件。 – pimvdb

相關問題