Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将导航位置设置为滚动顶部_Javascript_Html_Css - Fatal编程技术网

Javascript 将导航位置设置为滚动顶部

Javascript 将导航位置设置为滚动顶部,javascript,html,css,Javascript,Html,Css,我正在做一些CSS来设置我的导航在滚动条上的位置。我的导航标记是: <nav class="flex-nav" id="nav"> <ul> <li><a href="#">Item 01</a></li>... 我希望在向下滚动时将其设置为顶部,在再次滚动到页面顶部并将其设置回顶部时取消单击:6em 我是否需要JavaScript来处

我正在做一些CSS来设置我的导航在滚动条上的位置。我的导航标记是:

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