2

我需要在第一次.scrollTop()更改时运行一个函数,然后再也不运行。我尝试了几件事,包括以下内容,但没有运气:

var view = $('#workspace');

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

由于多种原因,这是错误的,但我不确定如何以其他方式解决此问题。

  1. 这只会在用户碰巧碰到滚轮时才会运行,.scrollTop() == 3而滚轮并不总是如此。
  2. .scrollTop() == 3可能多次为真。
4

1 回答 1

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如果用户在 范围内20px,这将返回100px

于 2012-09-28T18:30:35.020 回答