2017-08-17 9 views
0

2つのスライドショー間の距離を計算し、それらが過去にスクロールされているかどうかを検出し、重要な最初のスライドを表示するように指示するjQuery関数があります。それに関する情報。jQuery関数の実行を一定時間無効にする方法

しかし、それは一度表示されますが、if文がループして表示され続けます。

もう一度実行する前に関数が25秒間待機するように強制する方法があるのでしょうか?どんな助けでも大歓迎です。ここ

はjQueryのコードである:HTMLとして

$(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'); 
    } 
    }); 
}); 

、スライドショーは、主容器内に保持されており、重要な情報と各スライドショーはclass = 'infoIdentifier'としてタグ付けされています。関数のこの部分はその仕事をします。計算はうまくいき、クラスのアプリケーションは問題ありませんが、if (scroll > objectpos && scroll < nextobjectpos){ステートメントをx秒間に無効にするにはどうすればよいですか。どんな助けでも大歓迎です。ありがとうございました!

答えて

1

これを達成する方法の1つがここにあります。スクロール機能の外で、最初にfalseに設定されているwaitというブール値を追加しました。

次に、ifロジックに条件として!waitを追加しました。つまり、waitが現在falseの場合のみ検証されます。

は、そのブロック内で、私はtruewaitを設定し、waitバックfalseに設定された後25秒間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

ありがとうございました。私は別の質問があります。それぞれの独立したスライドに独自のタイマーがあるように 'window.scroll'関数を' each'関数に入れることは可能でしょうか?自分の位置を切り替えて、それぞれの 'each'関数にそれ自身のwait varそれはうまくいかなかった、どんな考え? –

+0

私は自分の質問に答えたようですが、私はそれぞれの機能をスクロールして '$(this)= $ this'を設定しています。ご協力ありがとうございました。 –

関連する問題