Javascript 将导航位置设置为滚动顶部
我正在做一些CSS来设置我的导航在滚动条上的位置。我的导航标记是:Javascript 将导航位置设置为滚动顶部,javascript,html,css,Javascript,Html,Css,我正在做一些CSS来设置我的导航在滚动条上的位置。我的导航标记是: <nav class="flex-nav" id="nav"> <ul> <li><a href="#">Item 01</a></li>... 我希望在向下滚动时将其设置为顶部,在再次滚动到页面顶部并将其设置回顶部时取消单击:6em 我是否需要JavaScript来处
<nav class="flex-nav" id="nav">
<ul>
<li><a href="#">Item 01</a></li>...
我希望在向下滚动时将其设置为顶部,在再次滚动到页面顶部并将其设置回顶部时取消单击:6em
我是否需要JavaScript来处理这个问题,并在导航上设置一个id以在JavaScript中使用它
onload = _ => {
let nav = document.getElementById("nav");
let basePos = nav.offsetTop;
setInterval(_ => {
nav.style.top = Math.max(0, basePos - scrollY) + "px";
}, 20);
};
这大约每20毫秒运行一次,并更新元素位置
这大约每20毫秒运行一次,并更新元素位置。以下是用纯Javascript编写的工作代码段: var body=document.getElementsByTagName'body'[0], nav=document.getElementById'nav'; window.addEventListener'scroll',函数{ 如果body.scrollTop>0{ nav.className+=无缩进 }否则{ nav.classList.removeno-indent; } }是的 .灵活导航{ 位置:固定; 顶部:6em; 宽度:100%; 高度:50px; 背景颜色:绿色; 过渡:全部。5s轻松进出; } 内容{ 宽度:100%; 高度:1000px; 背景颜色:灰色; } .没有缩进{ 顶部:0!重要; }
以下是用纯Javascript编写的工作代码段: var body=document.getElementsByTagName'body'[0], nav=document.getElementById'nav'; window.addEventListener'scroll',函数{ 如果body.scrollTop>0{ nav.className+=无缩进 }否则{ nav.classList.removeno-indent; } }是的 .灵活导航{ 位置:固定; 顶部:6em; 宽度:100%; 高度:50px; 背景颜色:绿色; 过渡:全部。5s轻松进出; } 内容{ 宽度:100%; 高度:1000px; 背景颜色:灰色; } .没有缩进{ 顶部:0!重要; }
谢谢:我猜是这样。没有标识会将位置设置为顶部:当滚动大于0时为0,否则不使用它。但我看不到。标记中没有标识?那么,那就没必要了?@user2371684,是的,你说得对。此类不在HTML代码中,因为它是通过此行中的Javascript应用的:document.getElementById'nav'.className+=无缩进。它是基于从顶部滚动的像素来应用和删除的:如果scrollTop>0-添加类,如果scrollTop==0-删除类MDN说,由于滚动事件可以以很高的速率触发,事件处理程序不应该执行计算代价很高的操作,例如DOM修改。您至少应该将元素保存在变量中。谢谢:我猜是这样。当滚动大于0时,没有标识将位置设置为顶部:0,否则不使用它。但我看不到。标记中没有标识?那么,那就没必要了?@user2371684,是的,你说得对。此类不在HTML代码中,因为它是通过此行中的Javascript应用的:document.getElementById'nav'.className+=无缩进。它是基于从顶部滚动的像素来应用和删除的:如果scrollTop>0-添加类,如果scrollTop==0-删除类MDN说,由于滚动事件可以以很高的速率触发,事件处理程序不应该执行计算代价很高的操作,例如DOM修改。您至少应该将元素保存在变量中。
onload = _ => {
let nav = document.getElementById("nav");
let basePos = nav.offsetTop;
setInterval(_ => {
nav.style.top = Math.max(0, basePos - scrollY) + "px";
}, 20);
};