2017-02-21 47 views
0

我试图让一个侧栏以较慢的速度滚动,直到达到某个点。当用户达到该设定点时,侧边栏应该停止滚动。这里是我的jQuery代码:如何在条件满足后重新运行事件功能?

$(window).on("scroll", function() { 
    var sidebar = $('.sidebar'); 
    var stopPoint = $('#stop-point'); 
    var sidebarBottom = sidebar.offset().top + sidebar.height(); 
    var stopPointBottom = stopPoint.offset().top + stopPoint.height() - 30; 

    if (sidebarBottom > stopPointBottom) { 
     $('.sidebar').css({'top' : "288px"}); 
    } 
    else { 
     $('.sidebar').css({'top' : ($(this).scrollTop()/3)+"px"}); 
    } 
}); 

在ELSE条件是这样的情况下,一切都很好。问题在于IF条件满足时,即使再次向上滚动并再次满足ELSE条件,边栏仍保持在最低点。

如果有人能够帮助我了解我做错了什么,以及是否有更智能的方法来实现,我将不胜感激。

在此先感谢。

+0

Eww,[不要滚动劫持](https://envato.com/blog/scroll-hijacking/) –

回答

0

如果有人有兴趣在这里是如何,我已经修复它:

$(window).on("scroll", function() { 
    var sidebar = $('.sidebar'); 
    var stopPoint = $('#stop-point'); 
    var sidebarBottom = sidebar.offset().top + sidebar.height(); 
    var stopPointBottom = stopPoint.offset().top + stopPoint.height() - 30; 

    $('.sidebar').css({'top' : ($(this).scrollTop()/3)+"px"}); 

    if (($(this).scrollTop()/3) > 284) { 
     $('.sidebar').css({'top' : "284px"}); 
    } 
}); 

当滚动回顶部的sidebarBottom比stopPointBottom几个像素是更大,所以该条件是不可能满足。