2012-09-28 57 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)',因为我只需要它在第一次滚动时发生。谢谢! –

相关问题