Javascript_30_24
26861 ワード
こんにちは!
デレクです😃
今日は私が予備軍を受け入れる日です:)実は今受け入れています.
... 開くと、
경청하며
投稿が整理されます.今日はDay 24の計画を整理します
これは後でホームページを作ったり、美しいメニューバーを作ったりするときに必ず使う内容かもしれません.
24. Sticky Nav
n/a.ターゲット
ユーザーがページをスクロールするにつれて、上部のメニューバーで簡単なアニメーションを実現します.
ポートフォリオサイトやホームページを作成する際に使う価値のあるテーマだと思います.
DerekとWes Bos実装コード
const nav = document.querySelector("#main");
const topOfNav = nav.offsetTop;
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
window.addEventListener("scroll", fixNav);
簡単です!しかし今日のテーマはHTML
内容も添付しないと理解できないので、HTML
内容を追加します.<header>
<h1>A story about getting lost.</h1>
</header>
<nav id="main">
<ul>
<li class="logo"><a href="#">LOST.</a></li>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Images</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Maps</a></li>
</ul>
</nav>
<div class="site-wrap">
...
</div>
ユーザーと対話するのはnav
tag!つまり.<nav id="main">
<ul>
<li class="logo"><a href="#">LOST.</a></li>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Images</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Maps</a></li>
</ul>
</nav>
ѐの上の|ʢ4|が|ʢ4|のラベルがメニューバーです!
1.変数の設定
const nav = document.querySelector("#main");
const topOfNav = nav.offsetTop;
main
メニューバー要素、id
このメニューバーの上部位置値:)
2.登録イベント
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
window.addEventListener("scroll", fixNav);
1に登録されている変数を使用してイベントを登録します.nav
関数を見ると、条件文があります.if(window.scrollY >= topOfNav)
この条件文では、ユーザーが横方向に何回スクロールしたか、および何nav
値をスクロールしたかを確認します.
すなわち、ユーザが、topOfNav
のメニューバー上部の位置よりもメニューバー上部の位置でスクロールする場合、fixNav
というクラスをtopOfNav
に追加します.そうでなければ、nav
クラスを削除します.
3.制御fixed-nav属性
では、このクラスのnav
属性を見てみましょう..fixed-nav nav {
position: fixed;
box-shadow: 0 5px rgba(0, 0, 0, 0.2);
}
簡単です!スクロール回数が多いほど、メニューバーを固定するだけで済みます.したがって、fixed-nav
の値はCSS
に変更されます.
メニューバーを固定するほか、プロパティを変更することもできます.
メニューバーが固定されると、左に小さなラベルが見えます!
これはfixed-nav
で実現できる.li.logo {
max-width: 0;
overflow: hidden;
background: white;
transition: all 1s;
font-weight: 600;
font-size: 30px;
}
.fixed-nav li.logo {
max-width: 500px;
}
もともとはcss
にのみ適したposition
がfixed
になればよい.
つまり、ある場所にcss
classがあれば、li.logo
500 pxが固定されます!
その場所はどこでしょうか、function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
...
ここにはcss
に貼られているのが見えます!
ユーザーがスクロールしすぎると、.fixed-nav li.logo
TAGfixed-nav
class!max-width
底部のクラスがbody
のbody
タグには、次のものが含まれます.fixed-nav
属性が有効になります!
4.制御<body class="fixed-nav">
ここではいくつかの疑問があるかもしれませんが、logo
関数には特別な部分があります.function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
制御li
の部分!なぜなら、
const nav = document.querySelector("#main");
const topOfNav = nav.offsetTop;
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
window.addEventListener("scroll", fixNav);
<header>
<h1>A story about getting lost.</h1>
</header>
<nav id="main">
<ul>
<li class="logo"><a href="#">LOST.</a></li>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Images</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Maps</a></li>
</ul>
</nav>
<div class="site-wrap">
...
</div>
<nav id="main">
<ul>
<li class="logo"><a href="#">LOST.</a></li>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Images</a></li>
<li><a href="#">Locations</a></li>
<li><a href="#">Maps</a></li>
</ul>
</nav>
const nav = document.querySelector("#main");
const topOfNav = nav.offsetTop;
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
window.addEventListener("scroll", fixNav);
if(window.scrollY >= topOfNav)
.fixed-nav nav {
position: fixed;
box-shadow: 0 5px rgba(0, 0, 0, 0.2);
}
li.logo {
max-width: 0;
overflow: hidden;
background: white;
transition: all 1s;
font-weight: 600;
font-size: 30px;
}
.fixed-nav li.logo {
max-width: 500px;
}
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
...
function fixNav () {
if(window.scrollY >= topOfNav) {
document.body.classList.add("fixed-nav");
document.body.style.paddingTop = nav.offsetHeight + "px";
} else {
document.body.style.paddingTop = 0;
document.body.classList.remove("fixed-nav");
}
}
mix-width: 500px
ラベルがスクロールするにつれてpaddingTop
はfixNav
になります.paddingTop
nav
position
標高とマーク高さの比fixed
標高は瞬時に消える.スクロールすると、底の段落が境界からパチパチと上に飛び上がります!
これを回避するために、
position
の値をfixed
に入力するか、0に設定するなどの操作を追加しました.これは簡単ですが、いつか使うテーマを整理しました!
エラーや修正が必要な場合は、いつでもフィードバックしてください.
ありがとう!🤗
Reference
この問題について(Javascript_30_24), 我々は、より多くの情報をここで見つけました https://velog.io/@ghdtjrrl94/Javascript3024テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol