gpt4 book ai didi

javascript - 导航栏粘性收缩不起作用

转载 作者:行者123 更新时间:2023-11-30 14:52:12 25 4
gpt4 key购买 nike

我有一个简单的导航栏来处理导航栏的粘性收缩。

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);
});

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

我所做的是从 Sticky shrink 复制代码.但是我没有得到提到的链接中所示的效果。蓝色导航栏并没有像链接中那样在滚动页面时缩小。可能的问题和解决方案是什么。

最佳答案

只需更改:

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

将其从 CSS 中嵌套的 .nav 选择器中取出。

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

Ampersand (&) is a SASS nesting selector and you could do the same operation without nesting as shown below.

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>

关于javascript - 导航栏粘性收缩不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47944973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com