我創建了一個lightbox,它可以從圖庫中加載圖像,當單擊圖像時(一次一個)。問題是圖像不加載,因此圖像的尺寸未知。這裏是代碼:圖像載入觸發器立即
function showimage(image_path) {
imgobj = new Image();
imgobj.src = image_path;
var aspectratio = imgobj.width/imgobj.height;
var newht = imgobj.height;
var newwd = imgobj.width;
if (($(window).height() - 100) < newht) {
newht = $(window).height() - 100;
newwd = newht*aspectratio;
}
if (($(window).width() - 100) < newwd) {
newwd = $(window).width() - 100;
newht = newwd/aspectratio;
}
$('#lightbox img').attr('height', newht);
$('#lightbox img').attr('width', newwd);
$('#lightbox').show();
}
我使用的onLoad試過,但立即觸發和圖像仍沒有加載和犯規給予適當的圖像尺寸。 Here我讀到,當圖像已經加載到瀏覽器中時,onLoad被立即調用。
其他人都建議使用時間延遲「setTimeout」,但這似乎不是一個好的解決方案,因爲圖像可能具有不同的大小,並且可能需要不同的時間加載。
有什麼建議如何解決這個問題。
編輯1:
感謝下面的答案,我能夠得到使用負荷工作()的功能。但是現在如果圖像已經加載並且已經顯示在燈箱中,那麼再次點擊。 load()中的函數不會被調用,並且不會出現燈箱。有什麼建議麼?
編輯2:
解決方法:這是我工作:
function showimage(image_path) {
imgobj = new Image();
imgobj.src = image_path;
if (imgobj.complete == false)
$(imgobj).load(function(){processimage(imgobj);});
else
processimage(imgobj);
}
function processimage(imgobj) {
var aspectratio = imgobj.width/imgobj.height;
var newht = imgobj.height;
var newwd = imgobj.width;
if (($(window).height() - 100) < newht) {
newht = $(window).height() - 100;
newwd = newht*aspectratio;
}
if (($(window).width() - 100) < newwd) {
newwd = $(window).width() - 100;
newht = newwd/aspectratio;
}
$('#lightbox img').attr('height', newht);
$('#lightbox img').attr('width', newwd);
$('#lightbox').show();
}
'$(窗口).load'會等到所有外部文件都下載...你可以使用 –
而不是編輯的問題,以顯示你是如何解決它,請在下面接受一個答案,或添加您自己的解決方案作爲新的答案。這使得其他人將來可以更清楚地看到這個問題,並且允許你的答案被上/下調,並與可能給出的其他答案進行比較。如果是最好的,你甚至可以接受你自己的答案。 – jcsanyi