javascript - jQuery 粘性标题在特定高度闪烁

标签 javascript jquery html css

当窗口向下滚动时,我使用以下代码使菜单变粘。如果窗口高度足以向下滚动整个标题区域,它工作正常,但它会产生问题,因为高度刚好接近滚动,在这种情况下,它开始闪烁并且不允许滚动。

这是问题的演示,刷新几次并尝试向下滚动。我已将 body 高度设置为 622px 以重现该问题:

http://jsbin.com/ipEROYO/1

这是我正在尝试的代码:

$(document).ready(function() {
    var stickyNavTop = $('.nav').offset().top;

    var stickyNav = function(){
        var scrollTop = $(window).scrollTop(); 
        if (scrollTop > stickyNavTop) { 
            $('.nav').addClass('sticky');
        } else {
            $('.nav').removeClass('sticky'); 
        }
    };

    stickyNav();

    $(window).scroll(function() {
        stickyNav();
    });
});

CSS:

.sticky {
    position: fixed;
    width: 100%;
    left: 0;
    top: 0;
    z-index: 100;
    border-top: 0;
}

最佳答案

这是因为当您将导航 div 设置为 position:fixed 时,您正在缩短文档的长度(按该 div 的高度),这会导致滚动条消失,这导致 scrollTop() 值为 0,这导致 .nav div 为 position :static 一直往下滚动是无限循环。

这是我的 quick solution :

$(document).ready(function() {
    var height = $('.nav').outerHeight();
    $(window).scroll(function() {
            if($(this).scrollTop() > height)
            {
                $('.nav').css('position','fixed');
                $('body').css('padding-bottom',height+'px');
            }
            else if($(this).scrollTop() <= height)
            {
                $('.nav').css('position','static');
                $('body').css('padding-bottom','0');
            }
    });
    $(window).scroll();
});

关于javascript - jQuery 粘性标题在特定高度闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19386752/

相关文章:

javascript - 如何使用 jquery 获取 View 端口中当前查看的 div/div

php - 如果事件已存在于完整日历中,则不应允许选择日期

javascript - 如何使用 jQuery 在表格中淡入淡出

javascript - HTML Canvas 枪功能

javascript - 链接超时导致上次超时被拒绝?

javascript - 带有自定义图标的谷歌地图标记定位

javascript - 如何使用可排序的 jquery-ui 功能同时从两个表中拖放行进行排序?

html - 使用 Tab 键访问禁用的文本框

php - 我应该避免在 id 属性中编码信息吗

javascript - 在 AngularJS $http GET 中传递变量?