2012-02-06 45 views
0

我第一次做到這一點,它的工作原理:新值.resize

$(document).ready(function() { 
    var delay = 0; 
    var myLeft = $("#container").offset().left; 
    var myRight = myLeft + $("#container").outerWidth(); 
    var newWidth = $("#container").width(); 
    $("#head").animate({width: newWidth}); 
    $("#head").css("marginLeft", myLeft).css("marginRight", myRight); 
    $('.box').each(function() { 
     $(this).delay(delay).fadeIn(); 
     delay += 250; 
    }); 
}); 

然後我運行這一點,但它簡化版,工作,理想情況下它會在每個窗口大小調整工作:

function doSomething() { 
    var myLeft = $("#container").offset().left; 
    var myRight = myLeft + $("#container").outerWidth(); 
    var newWidth = $("#container").width(); 
    $("#head").animate({width: newWidth}); 
    $("#head").css("marginLeft", myLeft).css("marginRight", myRight); 
    }; 

var resizeTimer; 
$(window).resize(function() { 
    clearTimeout(resizeTimer); 
    resizeTimer = setTimeout(doSomething, 100); 
}); 

但它看起來像新的尺寸不適用每次有一個窗口調整大小,任何人?

回答

0

窗口調整大小,發生之前,因此設定新的值訣竅是包括用於窗口resize事件延遲定時器:

var delay = (function(){ 
    var timer = 0; 
    return function(callback, ms){ 
    clearTimeout (timer); 
    timer = setTimeout(callback, ms); 
}; 

});

$(window).resize(function() { 
delay(function(){ 
    if ($("#head").width() != $("#container").width()){ 
     var myLeft = $("#container").offset().left; 
     var newWidth = $("#container").innerWidth(); 
     var myRight = $(window).width() - ($("#container").offset().left + $("#container").outerWidth()); 
     $("#head").animate({ width: newWidth, marginLeft: myLeft, marginRight: myRight }, "fast"); 
    } 
}, 1000); 
}); 
1

嘗試

$("#head").css("margin-left", myLeft + "px").css("margin-right", myRight + "px"); 

您還縫使用不必要的「每個」子句你沒有做每盒什麼,只在#head。你確定你的意思是?

+0

它的作品當我第一次運行它,但它確實不是在Windows resize在 – 2012-02-06 22:04:49

+0

刪除您'#head'從你的'doSomething'功能的各個功能的語句,你似乎並不需要執行每個'.box'的操作。 – MMM 2012-02-06 22:07:12

+0

是的,我已經用正確的代碼更新了這個問題,當我第一次運行它時,甚至在每個框中都不需要這些CSS。然而,我不能讓它工作,它開始工作,但從來沒有調整大小 – 2012-02-06 22:09:39