2017-08-17 73 views
0

我有一個jQuery函數,可以計算兩個幻燈片之間的距離,並檢測它們是否已經滾動過去,並告訴它顯示第一張重要的幻燈片關於它的信息。如何禁用jquery函數執行一定的時間

但是,它顯示一次,但然後if語句循環並持續顯示它,這是預期的。

我想知道是否有辦法強制函數等待25秒鐘後再次執行?任何幫助將非常感激。

這裏是jQuery代碼:

$(window).scroll(function() { 
    $('.infoIdentifier').each(function() { 
    var scroll = $(window).scrollTop(); 
    var objectpos = $(this).offset().top - 600; 
    var nextobject = $(this).parent().nextAll('.slideshow').children(".infoIdentifier") 
    if (nextobject.length === 0) { 
     var nextobjectpos = 10000; 
    } else { 
     var nextobjectpos = nextobject.offset().top - 600; 
    } 
    if (scroll > objectpos && scroll < nextobjectpos) { 
     var $this = $(this).parent('.slideshow'); 
     var $currentSlide = $this.find('.active'); 
     var $nextSlide = $this.children('.jumbotron').first(); 
     $nextSlide.fadeIn(500).addClass('active'); 
     $currentSlide.fadeOut(500).removeClass('active'); 
    } 
    }); 
}); 

至於HTML,該幻燈片是在主容器內,並且每個幻燈片放映的重要信息被標記爲class = 'infoIdentifier'。這部分功能完成它的工作。計算結果很好,類的應用很好,但是,如何在幾秒內禁用if (scroll > objectpos && scroll < nextobjectpos){語句。任何幫助將非常感激。謝謝!

回答

1

以下是實現此目的的一種方法。我在您的滾動功能之外添加了一個名爲wait的布爾值,最初設置爲false

然後我將!wait作爲條件添加到您的if邏輯中,這意味着只有在wait當前爲false時纔會生效。

然後該塊內,我設置waittrue,和25秒,在這之後wait被設置回false開始setTimeout

在那25秒內,幻燈片代碼將不會運行。

var wait = false; 

$(window).scroll(function() { 
    $('.infoIdentifier').each(function() { 
    var scroll = $(window).scrollTop(); 
    var objectpos = $(this).offset().top - 600; 
    var nextobject = $(this).parent().nextAll('.slideshow').children(".infoIdentifier") 
    if (nextobject.length === 0) { 
     var nextobjectpos = 10000; 
    } else { 
     var nextobjectpos = nextobject.offset().top - 600; 
    } 
    if (!wait && scroll > objectpos && scroll < nextobjectpos) { 
     var $this = $(this).parent('.slideshow'); 
     var $currentSlide = $this.find('.active'); 
     var $nextSlide = $this.children('.jumbotron').first(); 
     $nextSlide.fadeIn(500).addClass('active'); 
     $currentSlide.fadeOut(500).removeClass('active'); 

     wait = true; 
     setTimeout(function() { 
     wait = false; 
     }, 25000); 
    } 
    }); 
}); 
+0

謝謝你的幫助。我還有一個問題,是否可以在'each'函數中放入'window.scroll'函數,以便每個單獨的幻燈片都有自己的計時器,我嘗試切換它們的位置併爲每個'each'函數分配自己的等待變量它沒有工作,有什麼想法? –

+0

我似乎已經回答了我自己的問題,我換了each和scroll函數並設置了'$(this)= $ this',它似乎正在工作。感謝您的幫助。 –

相關問題