javascript - 导航栏和滚动 jQuery 出现问题

标签 javascript jquery html css

我需要帮助,我的导航栏是透明背景,所以当我滚动 > 540px 时,导航栏会变成黑色,但是当滚动 > 540px 并更新页面时,导航栏会变为透明,直到我进行最小滚动,我该怎么办解决问题了吗?

$(window).on('scroll', function() {
    if ($(this).scrollTop() > 540) {
        $('.sec').addClass('navbar-index-scroll animated fadeInDown').removeClass('fadeOutUp');
    } else {
        $('.sec').removeClass('fadeInDown').addClass('fadeOutUp');
    }
});

最佳答案

当您浏览网站时,例如使用刷新或历史记录(后退/前进)按钮,浏览器可以记住旧的滚动状态

为了补偿已经滚动的页面,您可以:

// 1. Create a function to handle the navbar states/styles

function navbarScrollposStyles() {
    if($(window).scrollTop() > 540) {
        $('.sec').addClass('navbar-index-scroll animated fadeInDown').removeClass('fadeOutUp');
    } else {
        $('.sec').removeClass('fadeInDown').addClass('fadeOutUp');
    }
}

$(navbarScrollposStyles);                           // 2. Do on DOM ready and 
$(window).on('load scroll', navbarScrollposStyles); // 3. on window.onload and onscroll

P.S:在您的特定代码中,我无法理解 navbar-index-scrollanimated 类在 else block 中没有得到正确处理,……但那是另一对鞋子。

此外,在每个滚动“tick”(事件)上查询文档中的某些 .sec 元素的成本非常高。您应该将选择器缓存到一个变量中,例如var $sec = $(".sec"); -
您还可以通过使用一些 Throttle function 来防止此类事件被触发太多次并降低性能。

关于javascript - 导航栏和滚动 jQuery 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43927073/

相关文章:

asp.net - 在 ASP.NET 中检查服务器中是否存在文件

javascript - 来自对象实例的方法不执行

javascript - Jquery 删除类失败

javascript - 使用 AJAX 提交表单 laravel

javascript - 基于 jquery cookie 的操作

javascript - Jquery 和 html::Getting the nearest data attribute

javascript - 与iframe和/或窗口弹出窗口共享WebGL上下文

javascript - 在复选框更改时重置 mootools 的表单检查

jquery 验证 valid() 始终返回 true 并且未创建表单的 novalidate ="novalidate"属性

javascript foreach 返回包含名称的结果