javascript - jQuery 修复了在滚动时缩小到较小尺寸的导航栏是 super 马车

标签 javascript jquery html css

当使用 jQuery 和 CSS 的组合来触发我的导航栏在滚动时收缩时,当您向上滚动到某个位置时它会出现错误,我已经链接了一个视频作为示例。

我尝试了两种不同的方法。第一个是将 $(window).scrollTop) 与 if 语句和一系列 .addClass 和 .removeClass 一起使用。我尝试的第二件事是使用 $(window).scrollTop) 进行一系列 .css 动态样式修改。这两种尝试都呈现与此视频中所示相同的最终结果 https://youtu.be/YXKsrL1cghs .

我的第一次 jQuery 尝试:

$(document).ready(function () {
    $(window).on("scroll", function () {
        if ($(window).scrollTop() >= 40) {
            $(".navbar").removeClass("py-5");
            $(".navbar").addClass("compressed");
        } else {
            $(".navbar").addClass("py-5");
            $(".navbar").removeClass("compressed");
        }
    });
});

我的第二次 jQuery 尝试:

$(document).ready(function () {
    $(window).on("scroll", function () {
        if ($(window).scrollTop() >= 40) {
            $(".navbar").css({ "padding-top": "10px" });
            $(".navbar").css({ "padding-bottom": "10px" });
        } else {
            $(".navbar").css({ "padding-top": "3rem" });
            $(".navbar").css({ "padding-bottom": "3rem" });
        }
    });
});

我的 CSS:

.navbar.compressed {
    padding-top: 10px;
    padding-bottom: 10px;
}

我的预期结果是一个平滑滚动的固定导航栏,在滚动超过某个点后缩小到较小的尺寸。

实际发生的是,当您向下滚动超过某个点时,对于 20 像素的高度,它会变得 super 错误并开始上下弹跳。一旦你清除了这 20 像素左右,它就完全没问题了,但是当你向上滚动时,它在这 20 像素内的行为是一样的。

最佳答案

观看视频时,我注意到您的.navbartransition: all .3s。这可能是因为当您删除类 py-5 并添加类 compressed 时,它会触发两次转换。

如果您能同时提供 HTML 标记和 CSS,将会很有帮助。

关于javascript - jQuery 修复了在滚动时缩小到较小尺寸的导航栏是 super 马车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139601/

相关文章:

java - 取消选择选项卡时如何在浏览器中暂停 Applet

php - 从 mysql 表加载的 php 代码不会在输出页面上解释

javascript - 如何在 javascript 中获取所有 h1、h2、h3 等元素?

javascript - 使用 Jquery/Javascript/PHP 删除基于滚动的可见通知

javascript - 尝试使用 Node.js 动态路由从 IMDB 中抓取电影内容。但我的output.json 文件中未定义?

javascript - 我需要使用正则表达式和 Javascript 匹配 url 路径的特定部分

jquery - 为什么网页上没有显示高度和宽度?

javascript - HTML/CSS/JS固定位置div不固定

javascript - 根据开始和结束位置突出显示字符串中的子字符串

jquery - knockout 拖放: On drag enter hiding div and on drag leave show div [Mine is different]