次のようなナビゲーションバーを作成しようとしています。
これまでのところ、私はうまくいく方法を見つけました。しかし、もっと効率的な方法が必要です。ナビゲーションバーを表示および非表示にする機能があります。また、上部に到達したときに1つの間隔で再び拡大します。私はそれらを組み合わせようとしましたが、いつも失敗しました...ありがとう!
HTML
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<header id="navbar" class="navbar">
<a href="#home">Home</a>
<a href="#news">News</a>
<a href="#contact">Contact</a>
</header>
</body>
</html>
JavaScript
var prevScrollpos = window.pageYOffset;
var shrinkHeader = 200;
function tellMeAStory() {
}
window.onscroll = function() {
var currentScrollPos = window.pageYOffset;
if (prevScrollpos > currentScrollPos) {
document.getElementById("navbar").style.top = "0";
} else {
document.getElementById("navbar").style.top = "-200px";
$('.navbar').addClass('shrink');
}
prevScrollpos = currentScrollPos;
}
setInterval(function(){
var scroll = getCurrentScroll();
if (scroll < 10){
$('.navbar').removeClass('shrink');
} else {}
},250)
function getCurrentScroll() {
return window.pageYOffset || document.documentElement.scrollTop;
};
CSS
body {
margin: 0;
background-color: #f1f1f1;
font-family: Arial, Helvetica, sans-serif;
height: 2000px;
}
header {
background-color: #333;
position: fixed;
top: 0;
width: 100%;
display: block;
transition: all 0.3s;
height: 200px;
}
.grow{
height: 200px;
}
.shrink{
height: 50px;
}
#navbar a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 15px;
text-decoration: none;
font-size: 17px;
}
#navbar a:hover {
background-color: #ddd;
color: black;
}
JSFiddle
これが私がするいくつかの改善です:
setInterval
ここで不要な関数を削除します。var prevScrollpos = getCurrentScroll();
var shrinkHeader = 200;
var ticking = false;
// Cache it so you don't have to get it on every scroll event
var navbar = document.getElementById('navbar');
window.addEventListener('scroll', function() {
var currentScrollPos = getCurrentScroll();
if (!ticking) {
window.requestAnimationFrame(function() {
if (prevScrollpos > currentScrollPos) {
navbar.style.top = '0';
} else {
navbar.style.top = '-200px';
navbar.classList.add('shrink');
}
if (currentScrollPos < 10) {
navbar.classList.remove('shrink');
}
prevScrollpos = currentScrollPos;
ticking = false;
});
ticking = true;
}
});
function getCurrentScroll() {
return window.pageYOffset || document.documentElement.scrollTop;
};
body {
margin: 0;
background-color: #f1f1f1;
font-family: Arial, Helvetica, sans-serif;
height: 2000px;
}
header {
background-color: #333;
position: fixed;
top: 0;
width: 100%;
display: block;
transition: all 0.3s;
height: 200px;
}
.grow {
height: 200px;
}
.shrink {
height: 50px;
}
#navbar a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 15px;
text-decoration: none;
font-size: 17px;
}
#navbar a:hover {
background-color: #ddd;
color: black;
}
<header id="navbar" class="navbar">
<a href="#start">Start</a>
<a href="#one">One</a>
<a href="#two">Two</a>
</header>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加