我想寫一些JS複製jQuery的fadeIn和fadeOut函數。下面的代碼我到目前爲止:我在與第一setTimeout調用煩惱Javascript:如何將不同的對象傳遞給循環中創建的setTimeout處理程序?
function fadeIn(elem, d, callback)
{
var duration = d || 1000;
var steps = Math.floor(duration/50);
setOpacity(elem,0);
elem.style.display = '';
for (var i = 1; i <= steps; i++)
{
console.log(i/steps + ', ' + (i/steps) * duration);
setTimeout('setOpacity("elem", '+(i/steps)+')', (i/steps) * duration);
}
if (callback)
setTimeout(callback,d);
}
function setOpacity(elem, level)
{
console.log(elem);
return;
elem.style.opacity = level;
elem.style.MozOpacity = level;
elem.style.KhtmlOpacity = level;
elem.style.filter = "alpha(opacity=" + (level * 100) + ");";
}
- 我需要傳遞的對象「ELEM」(這是一個DOM元素)的功能setOpacity。傳遞'level'變量很好......但是,我收到了「elem沒有定義」的錯誤。我認爲這是因爲在任何setOpacity調用實際運行時,最初的fadeIn函數已經完成,因此變量elem不再存在。
爲了減輕這個問題,我試圖另一種方法:
setTimeout(function() { setOpacity(elem, (i/steps));}, (i/steps) * duration);
麻煩現在是,當調用該函數時,(I /步)現在是總是1.05,而不是從0遞增到1
如何在正確提高不透明度級別的同時將有問題的對象傳遞給setOpacity?
創建許多一個定時器,是不是效率的最佳實踐。如果值不是100%,您可能想重新考慮使用1超時並重新初始化它。 – epascarello 2010-08-10 03:43:55