2012-09-28 218 views
2

我需要運行一個函數,第一次.scrollTop()更改,然後再也不會再次運行。我嘗試了兩件事情,包括以下內容,但沒有運氣:第一次滾動時運行函數,然後再次不再

var view = $('#workspace'); 

view.bind("scroll resize", function() { 
    doThisEveryScroll(); 
    if(view.scrollTop() == 3) { 
    doThisOnFirstScroll(); 
    } 
}); 

這是錯誤的,有很多原因,但我不知道如何將此方法任何其他方式。

  1. 這將只在用戶碰巧碰到.scrollTop() == 3時纔會運行,這對於滾輪而言並非總是如此。
  2. .scrollTop() == 3可能是真實的多次。

回答

7

使用.one()設置的事件處理函數分離本身一旦它被稱爲:

$('#workspace').on('scroll resize', function() { 
    doThisEveryScroll(); 
}).one('scroll resize', function() { 
    if (Math.abs(100 - $(this).scrollTop()) < 20) { 
    doThisOnFirstScroll(); 
    } 
}); 

您也可以通過計算目標的距離提供誤差爲目標滾動位置的保證金:

Math.abs(100 - $(this).scrollTop()) < 20 

這將返回true如果用戶是內100px20px

+0

'.one'正是我所期待的。儘管我堅持使用'.bind'而不是'.on'。出於某種原因,我得到一個錯誤,說我的對象不支持'.on'。你的誤差範圍很聰明,但我只是使用了'if(view.scrollTop()> 0)',因爲我只需要它在第一次滾動時發生。謝謝! –

相關問題