为什么我的功能不会停止?

时间:2017-12-04 23:35:02

标签: javascript jquery

我有一份退货声明,我的情况肯定得到满足。但功能仍在运行,不确定原因。

<script>                                                                   
var loop = true;                                                           
fade();                                                                    
// rotate navigation banners                                               
    function fade(){                                                   
        var divs = jQuery('.site-wide-notification');                  
        var current = jQuery('.first-notification');                   
        var currentIndex = divs.index(current),                        
            nextIndex = currentIndex + 1;                              

        if (nextIndex >= divs.length){                                 
            nextIndex = 0;                                             
        }                                                              
        var next = divs.eq(nextIndex);                                 
        next.stop().fadeIn(2000, function(){                           
            jQuery(this).addClass('first-notification');               
            setTimeout(fade, 3000);                                    
        });                                                            
        current.stop().fadeOut(2000, function(){                       
            jQuery(this).removeClass('first-notification');            
        });                                                            

        jQuery('.site-wide-notification').click(function(){            
            console.log('Closed');                                     
            jQuery('.site-wide-notification').css('display', 'none');  
            loop = false;                                              
        });                                                            
        if (!loop){                                                    
            console.log('stop da loop');                               
            return false;                                              
        }                                                              
    }                                                                  

此代码用于旋转顶部的一些横幅,淡入淡出,当用户点击其中任何一个时,它会将它们全部设置为display: none。当用户点击其中任何一个时,显示console.log('Closed')并且循环设置为false,然后输入if !loop语句并且控制台打印stop da loop,但淡入淡出功能继续运行尽管它回归了。

1 个答案:

答案 0 :(得分:1)

您的函数是返回false(在!loop情况下)还是undefined(否则)无关紧要。当您拨打fade()时,它会设置一个计时器以再次呼叫fade()。无条件。

if (!loop) return;测试移至功能顶部。这样,如果循环不应继续,则在设置下一次迭代之前函数将退出。