[英]setTimeout issue
我正在嘗試在Javascript中創建一個jquery fadeto類型的效果,但是我的setTimeout命令出了問題。
這是代碼:
function textfade(y) {
var x = document.getElementById("test");
var y;
if (y == undefined) {
y = 1.0;
}
x.style.opacity = y;
y -=0.1;
setTimeout(function(){ textfade(y); }, 50);
}
問題是x.style.opacity = y
。
沒有它,超時運行正常。 然而,有了它,它會在函數中運行一次然后死掉。 雖然我覺得這是一個簡單的錯誤,但我沒有修復它的想法。
任何建議將不勝感激。
先感謝您。
每次執行textfade()
時都會重新聲明y
,有效地破壞/重置傳遞的參數。
去掉:
var y;
確保在test
元素可用之后運行它。 這里工作正常: http : //jsfiddle.net/3yDMP/ 。 在這里: http : //jsfiddle.net/3yDMP/3/ - 不,因為函數是在head中調用的,而不是onload(就像在小提琴中一樣),當dom尚未准備好並且不可用時。
所以,在你的可能
<head>
<script>
function textfade() {...}
</script>
</head>
<body onload="textfade()">
<div id="test"> ... </div>
恕我直言這會更好,因為setTimeout
調用一個內部閉包,其中當前不透明度級別保持在淡入淡出函數本身之外,因此您不必傳遞它。
function textfade(el) {
if (typeof el === "string") {
el = document.getElementById(el);
}
var opacity = 1.0;
(function fade() {
el.style.opacity = opacity;
opacity -= 0.1;
if (opacity > 0) {
setTimeout(fade, 50);
}
})();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.