第一次滚动时运行函数,然后再次不再
问题描述:
我需要运行一个函数,第一次.scrollTop()
更改,然后再也不会再次运行。我尝试了两件事情,包括以下内容,但没有运气:第一次滚动时运行函数,然后再次不再
var view = $('#workspace');
view.bind("scroll resize", function() {
doThisEveryScroll();
if(view.scrollTop() == 3) {
doThisOnFirstScroll();
}
});
这是错误的,有很多原因,但我不知道如何将此方法任何其他方式。
- 这将只在用户碰巧碰到
.scrollTop() == 3
时才会运行,这对于滚轮而言并非总是如此。 -
.scrollTop() == 3
可能是真实的多次。
答
使用.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
如果用户是内100px
20px
。
'.one'正是我所期待的。尽管我坚持使用'.bind'而不是'.on'。出于某种原因,我得到一个错误,说我的对象不支持'.on'。你的误差范围很聪明,但我只是使用了'if(view.scrollTop()> 0)',因为我只需要它在第一次滚动时发生。谢谢! –