2014-06-10 28 views
0

我有4個divs;如何防止滾動時重複的事件 - jQuery

<div class="diva">diva</div> 
<div class="divb">divb</div> 
<div class="divc">divc</div> 
<div class="divd">divd</div> 

他們是400px寬和高。當div b捲動到頁首時,我想提醒a,並使用scroll函數和scrollTop方法。每次滾動時,它會檢查scrollTop()是否大於400,並提醒a。但是,如果我不點擊在警報窗口的確定按鈕,如果我繼續滾動,多個警報將會出現,並且我會關閉它們。但我只想要一個警報,即使我繼續滾動,我也不想再發出警報。另外,如果scrollTop低於400px,我想提醒b(這裏也是,我不想重複)。如果我得到警報a,並且如果我向相反的方向滾動,並且如果scrollTop變得低於400px,我需要警報b,對此沒有任何問題。

Here是小提琴。

在此先感謝..

回答

1

請在您的JS文件添加這個腳本,並嘗試這個腳本:

$(document).ready(function() { 
    $(window).scroll(function(){ 
     var xx = $(document).scrollTop(); 
     if(xx > jQuery(".divb").height()){ 
     alert("a"); 
     }else{ 
     alert("b"); 
     }   
    }); 
}); 
+1

儘管這段代碼可能解決了這個問題,但一個代碼只有答案不是很高質量。最好描述這段代碼的作用,顯示它被插入的位置,並提供相關文檔的鏈接。 –

+0

感謝您的建議,我會嘗試使用易於理解的短語。 –

0

您彈出一個「滾動」事件恰好每次滾動實時警報。 如果這只是一個調試煩惱,你可以做的是使用console.log('a')代替 - example

如果你想讓實際的函數每次運行一次,你可以做到這一點:

var a = false; 
$(window).scroll(function(){ 
    var xx = $(document).scrollTop();  
    if(xx > 400){ 
     if (!a) { 
     alert("a"); 
      a = true; 
     } 
    }else{ 
     if (a) { 
     alert("b"); 
      a = false; 
     } 
    }   
}); 

fiddle這個例子

0

,以避免任何混亂將是保持滾動操作的狀態,最簡單的方法。

演示:http://jsfiddle.net/abhitalks/uwUvC/1/

var last = 0, // last scroll-top to determine scroll direction 
    scrolledUp = false, // to cache state of scroll up 
    scrolledDown = false; // to cache state of scroll down 
$(window).scroll(function (event) { 
    var current = $(this).scrollTop(); 
    if (current > last) { // if scrolled down 
     if (current > 400 && !scrolledDown) { // check position and state 
      alert("A"); 
      scrolledDown = true; // reset scroll down state 
     } 
    } else { // if scrolled up 
     if (current < 400 && scrolledDown && !scrolledUp) { 
      alert("B"); 
      scrolledUp = true; // reset scroll up state 
     } 
    } 
    last = current; // keep current position to check direction 
}); 

這樣,您能夠確保當你滾動起來,當你向下滾動。保持各個變量的滾動狀態並檢查它們。

警報僅在每個方向觸發一次。

相關問題