繁体   English   中英

导航栏粘滞收缩不起作用

[英]Navbar Sticky Shrink Not Working

我有一个简单的导航栏,可以对导航栏进行粘性收缩。

HTML: -

<!DOCTYPE html>
<html>
<head>
    <title></title>

    <link rel="stylesheet" type="text/css" href="style.css">

    <script type="text/javascript" src="script.js"></script>

    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

    <!-- jQuery library -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

    <!-- Latest compiled JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <header></header>

    <nav id="nav" class="nav">
        <div class="nav__inner">
        </div>
    </nav>

    <div class="container">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt id error ut delectus a sapiente accusantium quam, laudantium, atque laborum, distinctio. Commodi perspiciatis ipsa ducimus labore, iure dignissimos fugit quae.</p>
    </div>

    <footer>This is footer</footer>

</body>
</html>

CSS: -

* {
    box-sizing: border-box;
}

body {
    font-family: 'helvetica neue';
    letter-spacing: 0.03em;
    color: #333;
}

header {
    height: 150px;
    background: black;
}

footer {
    height: 50px;
    background: black;
    color: dodgerblue;
}

.nav {
    position: sticky;
    top: 0;
    height: 80px;
    background: dodgerblue;
    transition: height 200ms ease;

    &.is-shrunk {
        height: 50px;
    }
}

JS: -

const nav = document.getElementById('nav');

const navFromTop = nav.offsetTop;

const navHeight = nav.offsetHeight;

const distanceScrolled = () => {
   return window.pageYOffset;
};

const isScrolledEnough = () => {
   return (distanceScrolled() > navFromTop + navHeight);
};

const setIsShrunk = (value) => {
    if (value && isScrolledEnough()) {
        nav.classList.add('is-shrunk');
    } else if (!value) {
        nav.classList.remove('is-shrunk');
    }
};

window.addEventListener('scroll', () => {
    setIsShrunk(distanceScrolled() > navHeight);
});

我希望此代码在页面滚动时将蓝色导航栏从80px的高度缩小到50px的高度。

我所做的是从Stickyrink上复制代码。 但是我没有得到所提到的链接所示的效果。 滚动链接时,蓝色导航栏在滚动页面时没有收缩。 可能是什么问题和解决方案。

只是改变 :

&.is-shrunk {
        height: 50px;
}

以下内容,并将其从CSS中的嵌套.nav选择器中删除。

.nav.is-shrunk {
        height: 50px;
}

“&”号(&)是SASS嵌套选择器,您可以执行相同的操作而无需嵌套,如下所示。

 const nav = document.getElementById('nav'); const navFromTop = nav.offsetTop; const navHeight = nav.offsetHeight; const distanceScrolled = () => { return window.pageYOffset; }; const isScrolledEnough = () => { return (distanceScrolled() > navFromTop + navHeight); }; const setIsShrunk = (value) => { if (value && isScrolledEnough()) { nav.classList.add('is-shrunk'); } else if (!value) { nav.classList.remove('is-shrunk'); } }; window.addEventListener('scroll', () => { setIsShrunk(distanceScrolled() > navHeight); }); 
 * { box-sizing: border-box; } body { font-family: 'helvetica neue'; letter-spacing: 0.03em; color: #333; } header { height: 150px; background: black; } footer { height: 50px; background: black; color: dodgerblue; } .nav { position: sticky; top: 0; height: 80px; background: dodgerblue; transition: height 200ms ease; } .nav.is-shrunk { height: 50px; } 
 <link rel="stylesheet" type="text/css" href="style.css"> <script type="text/javascript" src="script.js"></script> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <header></header> <nav id="nav" class="nav"> <div class="nav__inner"> </div> </nav> <div class="container"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt id error ut delectus a sapiente accusantium quam, laudantium, atque laborum, distinctio. Commodi perspiciatis ipsa ducimus labore, iure dignissimos fugit quae.</p> <p>Nesciunt eos recusandae adipisci nostrum illum eius. Tempora nemo necessitatibus temporibus quaerat laudantium dolorem minima blanditiis sapiente earum fugiat commodi officiis, magni ducimus corporis, ad! Maiores perspiciatis aperiam quod nemo.</p> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt id error ut delectus a sapiente accusantium quam, laudantium, atque laborum, distinctio. Commodi perspiciatis ipsa ducimus labore, iure dignissimos fugit quae.</p> <p>Nesciunt eos recusandae adipisci nostrum illum eius. Tempora nemo necessitatibus temporibus quaerat laudantium dolorem minima blanditiis sapiente earum fugiat commodi officiis, magni ducimus corporis, ad! Maiores perspiciatis aperiam quod nemo.</p> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt id error ut delectus a sapiente accusantium quam, laudantium, atque laborum, distinctio. Commodi perspiciatis ipsa ducimus labore, iure dignissimos fugit quae.</p> <p>Nesciunt eos recusandae adipisci nostrum illum eius. Tempora nemo necessitatibus temporibus quaerat laudantium dolorem minima blanditiis sapiente earum fugiat commodi officiis, magni ducimus corporis, ad! Maiores perspiciatis aperiam quod nemo.</p> <p>Quisquam magni doloribus deserunt rerum, expedita iste numquam ipsum velit beatae, dolores optio sapiente corporis voluptatum mollitia nemo excepturi eveniet provident dolorem facilis incidunt minus aliquam error quas. Distinctio, exercitationem!</p> <p>Esse sapiente dolore labore, fuga nobis voluptates explicabo odio asperiores, quod repudiandae totam harum tempora praesentium natus. Blanditiis, sint id sit, ab impedit fuga aliquam distinctio harum, ex molestias voluptates!</p> <p>Cumque laborum, ad sequi, reiciendis illum non vero voluptatum libero consequatur quod vitae voluptatem quibusdam incidunt inventore temporibus omnis optio sint quasi soluta. Reprehenderit omnis inventore, doloremque repudiandae minus recusandae.</p> <p>Reiciendis hic, placeat laborum iure quo ratione ex perspiciatis, error perferendis sed facilis animi corrupti delectus soluta libero id eligendi iusto magnam itaque. Facere, ducimus. Eveniet officiis quod, vero asperiores.</p> </div> <footer>This is footer</footer> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM