javascript - 滚动然后固定到 html 中的顶部标题

标签 javascript html

所以,我希望有一个与此处类似的 header http://www.blackmesasource.com/ ,唯一的问题是我对 javascript 和 jquery 一无所知,有人可以帮助我吗?

最佳答案

很好 - 我刚刚为您敲定了这个 - 它很粗糙并且没有进行跨浏览器测试:

<style type="text/css">

    body {
        padding:0;
        margin:0;
    }

    #hero {
        background-color:#eee;
    }

    nav {
        position:absolute;
        bottom:0;
        left:0;
        background-color:#ccc;
        box-sizing:border-box;
        width:100%;
        padding:20px;
    }

    nav.fixed-position {
        position:fixed;
        top:0;
        bottom:initial;
    }

</style>

<body>

    <div>

        <div id="hero">

            <nav id="nav-menu">
                Your nav here
            </nav>

        </div>

        <section style="height:2000px;">

            content

        </section>

    </div>

    <script type="text/javascript">

        var hero = document.getElementById('hero'),
            nav = document.getElementById("nav-menu"),
            viewportHeight = Math.max(window.innerHeight || 0),
            navOffsetTop = nav.offsetTop;

        hero.style.height = viewportHeight + 'px';

        var hasScrolled = function() {

            var fromTop = document.body.scrollTop || document.documentElement.scrollTop || 0;

            if (navOffsetTop < fromTop) {
                nav.classList.add('fixed-position');
            } else {
                nav.classList.remove('fixed-position');
            }

        }

        window.addEventListener('scroll', hasScrolled);

    </script>

</body>

您可以将其放入一个空文件中,然后在浏览器中运行它以查看结果 - 我在 Firefox 中测试了它,没有任何问题,但正如我所说,它需要额外的工作;如:

  • 跨浏览器 - 根据您计划拥有的 IE 支持级别,classList 可能不起作用。
  • 优化 - 目前,每次用户滚动时都会触发 hasScrolled 函数,您可能需要找到一种方法来限制这种情况。
  • 全局变量 - 我没有尝试为 JS 使用干净的命名空间,您可能还想研究一下其他内容。

此外,这不需要 jQuery,但考虑到我刚刚建议你需要做的事情,你可能想考虑使用它 - 它主要是跨浏览器,如果你不太了解 JS,它会帮助你很多.

关于javascript - 滚动然后固定到 html 中的顶部标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903485/

相关文章:

javascript - 如何在函数外部使用全局变量

html - 如何使用 ionic 制作 pdf 生成器?

HTML/CSS/SVG : SVG background image in IE7/8

javascript - 如何在没有标签的地方添加标签?

javascript - 使用 JavaScript 使用输入值隐藏和显示 div

javascript - ajax后刷新页面

html - 响应式 div 折叠

javascript - 如何取消 Escape 按钮对 html 输入的影响?

html - CSS响应式绝对定位

javascript - JavaScript 引用传递如何解释这种行为?