【问题标题】:Loop in Jquery not workingJquery中的循环不起作用
【发布时间】:2014-08-10 05:08:58
【问题描述】:

我无法在 jquery 中循环,我希望不同的框一个接一个地连续出现。现在他们只显示一次。我也想淡入深红色框,然后淡出深红色框,在深绿色淡入和淡出深绿色之后,依次循环中的每个框,整个过程应该连续工作,当有人悬停时,它应该停止淡入并开始淡出鼠标.请帮帮我

请在下面找到我的代码:

        <script>
        $(document).ready(function() {
                function loop() {       
                setTimeout(function() {
                    $('.red_hover').delay(1000).fadeIn ({
                    }, 1000, "linear", function(){        
                    });

                    $('.red_hover').delay(1000).fadeOut ({
                    }, 1000, function(){        
                    });
                }, 1000);

                setTimeout(function() {
                    $('.green_hover').delay(1000).fadeIn ({
                    }, 1000, "linear", function(){        
                    });
                    $('.green_hover').delay(1000).fadeOut ({
                    }, 1000, function(){        
                    });
                }, 4000);

                }
                loop();
            });
        </script>

CSS:

            <style>
                .red{width:100px; height:100px; background:#F00; float:left;  
                 overflow:hidden; position:absolute; margin:0 0 0 10px;}
                .red_hover{width:100px; height:100px; background:#900; float:left;  
                 overflow:hidden; position:absolute; margin:0 0 0 10px; display:none;}

                .green{width:100px; height:100px; background:#0C3; float:left;  
                 overflow:hidden; margin:0 0 0 120px; position:absolute;}
                .green_hover{width:100px; height:100px; background:#060; float:left; 
                 overflow:hidden; position:absolute; margin:0 0 0 120px; display:none;}

                .blue{width:100px; height:100px; background:#09F; float:left; 
                 overflow:hidden; margin:0 0 0 230px; position:absolute;}
                .blue_hover{width:100px; height:100px; background:#00F; float:left; 
                 overflow:hidden; position:absolute; margin:0 0 0 230px; display:none;}

                .yellow{width:100px; height:100px; background:#FF0; float:left; 
                 overflow:hidden; margin:0 0 0 340px;}
                .yellow_hover{width:100px; height:100px; background:#F90; float:left; 
                 overflow:hidden; position:absolute; margin:0 0 0 340px; display:none;}

                .pink{width:100px; height:100px; background:#FCF; float:left; 
                 overflow:hidden; margin:0 0 0 450px; position:absolute;}
                .pink_hover{width:100px; height:100px; background:#F0F; float:left; 
                 overflow:hidden; position:absolute; margin:0 0 0 450px; display:none;}
            </style>

HTML:

            <div class="red"></div>
            <div class="red_hover"></div>
            <div class="green"></div>
            <div class="green_hover"></div>
            <div class="blue"></div>
            <div class="blue_hover"></div>
            <div class="yellow"></div>
            <div class="yellow_hover"></div>
            <div class="pink"></div>
            <div class="pink_hover"></div>

这是小提琴:http://jsfiddle.net/Lepw197v/

【问题讨论】:

  • 你想在第二个淡入淡出时隐藏第一个 div 吗??
  • 我没有看到实际的循环发生。您只是按原样调用它一次。如果循环在其中,则 for( var i = 0; i
  • @Harsh 是的,我想在第二个 div 淡入时隐藏第一个 div
  • @Scott 好的,但是这个变量是什么?因为每种颜色都有不同的类别。

标签: javascript jquery html css loops


【解决方案1】:

这样的?

http://jsfiddle.net/YoshiMaster/juz4jsx0/3/

$(document).ready(function() {
      function loop() {   

        $(".red").fadeOut(function(){green()});
        $(".green").fadeIn();
      }
      function green(){
           $(".red").fadeIn();
           $(".green").fadeOut();
      }

       setInterval(function() {loop()},1000);

  });

【讨论】:

    【解决方案2】:

    我认为你想要“setInterval”而不是“setTimeout”。

    看这个小提琴。它不能完美地工作,但它接近你想要的我的想法。 http://jsfiddle.net/bergonom/3bzfL87s/

    HTML:

    <div id="ColorBlocks">
    <div class="red"></div>
                <div class="red_hover"></div>
                <div class="green"></div>
                <div class="green_hover"></div>
                <div class="blue"></div>
                <div class="blue_hover"></div>
                <div class="yellow"></div>
                <div class="yellow_hover"></div>
                <div class="pink"></div>
                <div class="pink_hover"></div>
    </div>
    

    JS:

    $(document).ready(function() {
        var redInterval, greenInterval;
                    function loop() {       
                    redInterval = setInterval(function() {
                        $('.red_hover').delay(1000).fadeIn ({
                        }, 1000, "linear", function(){        
                        });
    
                        $('.red_hover').delay(1000).fadeOut ({
                        }, 1000, function(){        
                        });
                    }, 1000);
    
                    greenInterval = setInterval(function() {
                        $('.green_hover').delay(1000).fadeIn ({
                        }, 1000, "linear", function(){        
                        });
                        $('.green_hover').delay(1000).fadeOut ({
                        }, 1000, function(){        
                        });
                    }, 4000);
    
                    }
                    loop();
    
        $("#ColorBlocks").on("mouseover","> div", function() {
            clearInterval(redInterval);
            clearInterval(greenInterval);
        });
    
        $("#ColorBlocks").on("mouseout","> div", function() {
            loop();
        });
    

    (尽管由于某种原因,您的问题和我的回答被否决了。如果人们能解释原因会很好。)

    【讨论】:

    • 我对您的原始答案投了反对票,因为您写的只是一个单行字,说“我认为您想要“setInterval”而不是“setTimeout”,但没有解释您为什么“认为”这是更好的。正如它所写的那样,这是一个糟糕的答案,但现在好多了。但是,我确实觉得setTimeoutsetInterval 可以both 在这里使用,我实际上更喜欢setTimeout 用于这样的持续动画 - 最好在这里解释原因:stackoverflow.com/a/731625/933633
    • @PaparazzoKid:具有讽刺意味的是,您对我的单行答案投了反对票,但您最初甚至没有提供一个词来说明原因。话虽如此,我很感谢你事后的解释。
    • 没有什么讽刺的,完全。干杯。
    • 现在你只是故意不正确。我知道以后会忽略你的回复。
    • 现在你是故意幼稚的。这就是人们不喜欢就否决票提供反馈的原因——因为像你这样的人无法处理批评意见,最终想无所事事地争论。你不能成为一个男人并接受我的反馈,对吗?您只需要说“感谢您的反馈”。长大了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2018-07-01
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多