setInterval动画

时间:2011-11-30 21:31:38

标签: javascript setinterval

http://jsfiddle.net/vzBZB/5/

(function(){
var i = 1;
var start = true;   
    setInterval(function(){
        if (i>0&&start){
         var o = $("#box").css("opacity");

            var s = parseFloat(o) - 0.1;

            $("#box").css("opacity", s.toString());
           i = s;    
        }

        else {
        start = false;
         var o = $("#box").css("opacity");
        var s = parseFloat(o) + 0.1;

         $("#box").css("opacity", s.toString());
        i = s; 

        if (i==1) start = true;
        }




    }, 100);


})();

此代码执行简单动画 - 它从不透明度1变为0并返回1.但我想无限地执行此循环。我使用if (i==1) start = true;但它没有帮助。我该怎么办?第二个问题:当它停止不透明度是1.1。为什么?我该如何解决?

3 个答案:

答案 0 :(得分:1)

当你完成淡入时,只需将“start”设置为true即可。例如:

start = false;
var o = $("#box").css("opacity");
var s = parseFloat(o) + 0.1;

$("#box").css("opacity", s.toString());
i = s;
if(s >= 1) start = true; //Reset for next loop

这是我的工作示例:http://jsfiddle.net/vzBZB/8/

答案 1 :(得分:0)

您可能会发现以递归方式简单地使用.fadeToggle的回调参数更容易。请参阅我对jsfiddle的更新:http://jsfiddle.net/vzBZB/6/

答案 2 :(得分:0)

当它恢复到完全不透明度时,你没有将start设置为true ...

添加此

if (o >= 1){
    start=true;   
}

完整代码:

(function(){
var i = 1;
var start = true;   
    setInterval(function(){
        if (i>0&&start){
         var o = $("#box").css("opacity");

            var s = parseFloat(o) - 0.1;

            $("#box").css("opacity", s.toString());
           i = s;    
        }

        else {
        start = false;
         var o = $("#box").css("opacity");
        var s = parseFloat(o) + 0.1;

         $("#box").css("opacity", s.toString());
        i = s; 

        if (o >= 1){
            start=true;   
        }

        }




    }, 100);


})();