如何检测元素是否已滚出,但只有一次?

时间:2011-02-17 18:48:37

标签: jquery events event-handling scroll

我正在尝试检测元素是否已滚出并完成以下代码

$(window).bind('scroll', function(){
    var $btn = $('#intro div.summary a[href=#top]');
    if($(window).scrollTop() > ($btn.offset().top+$btn.height())){
        console.log('out');
    }
});

我在一些正文中有一个锚点,我希望克隆并在div.intro滚动出来时修复导航。

我的问题是,只要元素不在视图范围内,代码就会触发,但会一直触发。所以我不能再做了,因为还有更多东西会继续射击。

有没有办法在它出局后“开出”并且一旦进入“开启”?除了设置变量之外。

2 个答案:

答案 0 :(得分:7)

只有在您可以执行

后执行该事件
$(window).one('scroll', function(){
    var $btn = $('#intro div.summary a[href=#top]');
    if($(window).scrollTop() > ($btn.offset().top+$btn.height())) {
        console.log('out');
    }
});

答案 1 :(得分:1)

嗯,最简单的解决方案是在事件发生后unbind事件发生:

$(window).bind('scroll', function(){
    var $btn = $('#intro div.summary a[href=#top]');
    if($(window).scrollTop() > ($btn.offset().top+$btn.height())) {
        console.log('out');
        $(window).unbind('scroll');
    }
});