Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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_Css_Vue.js_Navbar_Nav - Fatal编程技术网

Javascript 滚动时隐藏导航栏,但这样做会使它';它不是活泼的,而是自然的';滚动离开';

Javascript 滚动时隐藏导航栏,但这样做会使它';它不是活泼的,而是自然的';滚动离开';,javascript,css,vue.js,navbar,nav,Javascript,Css,Vue.js,Navbar,Nav,因此,在滚动时,只需添加一个带有“top:-50px”的类就可以很容易地隐藏导航栏。然而,这感觉不是很自然。如果导航条通过实际的滚动隐藏起来,这样滚动的速度总是合适的,那就更好了。我不想设置动画,而是想在屏幕上滚动导航栏(立即滚动并在屏幕上再次向上滚动一定数量的像素后) 你将如何处理这个问题 顺便说一句,我真的不想为此使用任何JQuery,我使用的是Vue。您可以使用顶部的CSS转换来来回设置动画。无论滚动时如何触发隐藏,您都可以添加/删除类来触发更改。您可以使用顶部的CSS转换来来回设置动画。

因此,在滚动时,只需添加一个带有“top:-50px”的类就可以很容易地隐藏导航栏。然而,这感觉不是很自然。如果导航条通过实际的滚动隐藏起来,这样滚动的速度总是合适的,那就更好了。我不想设置动画,而是想在屏幕上滚动导航栏(立即滚动并在屏幕上再次向上滚动一定数量的像素后)

你将如何处理这个问题


顺便说一句,我真的不想为此使用任何JQuery,我使用的是Vue。

您可以使用
顶部的CSS转换来来回设置动画。无论滚动时如何触发隐藏,您都可以添加/删除类来触发更改。

您可以使用
顶部的CSS转换来来回设置动画。但是,当您滚动时触发隐藏,您可以添加/删除类来触发更改。

我希望我没有弄错,但是如果您希望滚动时隐藏条,为什么不将其放置在
position:absolute
位置并保留正常滚动使其消失?这听起来可能很琐碎,但如果你想自然消失,可能就是这样,不是吗?

我希望我没有弄错,但是如果你想在滚动时隐藏条,为什么不干脆
位置:绝对
它,并保持正常滚动使其消失?这听起来可能很琐碎,但如果您想要自然消失,可能就是这样,否?

将导航栏的位置设置为固定位置(或您当前拥有的任何位置),直到窗口上的滚动事件经过某个点,然后使导航栏相对于滚动容器

请参见此示例:

HTML

<div id="main-container">
  <div class="nav" id="nav" style="position:fixed; height: 100px; background-color: blue; color: white; width:100%;">
    This is the Nav Bar <span id="pos"></span>
  </div>
  <div style="position:relative; top:130px;" id="container">
    <p>
      This is some text
    </p>
  ...

它非常粗糙,但显示了原理。

将导航栏的位置设置为固定位置(或您当前拥有的任何位置),直到窗口上的滚动事件经过某个点,然后使导航栏相对于滚动容器

请参见此示例:

HTML

<div id="main-container">
  <div class="nav" id="nav" style="position:fixed; height: 100px; background-color: blue; color: white; width:100%;">
    This is the Nav Bar <span id="pos"></span>
  </div>
  <div style="position:relative; top:130px;" id="container">
    <p>
      This is some text
    </p>
  ...

它非常粗糙,但显示了原理。

这是我现在得到的最接近的结果:

除此之外,它的性能非常糟糕,而且可能没有太多的方法可以解决这个问题,它也没有很好地工作:当你向下滚动使整个导航栏隐藏,然后向上滚动一点,使其只显示一小部分,然后再向下滚动,保留一小部分导航栏,然后再往上走——它跳了一点,这是不应该的。我知道为什么会这样,但我现在找不到解决办法。也许你们中的某个人可以

*编辑:事实上,现在我在我的网站上运行它,我没有注意到太多的糟糕性能-是的,它需要很多,但我认为它可能是值得的:)可能会注意到在硬件较低的设备上

$(function(){
var lastScrollTop = 0, delta = 5, last = 'up', foo = 99999999, state = 'fixed', lastpos;
$(window).scroll(function(event){
   var st = $(this).scrollTop();

   // if(Math.abs(lastScrollTop - st) <= delta) return;

   if (st > lastScrollTop){      
       // scrolling down
       if(last == 'up') {
            if (state == 'fixed') {
                lastpos = (document.documentElement.scrollTop - 1);
              $("#header").css({'position': 'absolute', 'top': lastpos});
              state = 'absolute';
          }
          last = 'down';
       }
   } else {
       // scrolling up
       let posnow = document.documentElement.scrollTop
       if ((posnow - lastpos) > 50 || (posnow - lastpos) < 0) {
           if (last == 'down') {
               foo = posnow - 51;
               $("#header").css({'position': 'absolute', 'top': foo});

           } else {
              if (foo > st) {
                  $("#header").css({'position': 'fixed', 'top': '0'});
                  state = 'fixed'
              }
           }
        }   
                last = 'up';
   }
   lastScrollTop = st;

});
});
$(函数(){
var lastScrollTop=0,delta=5,last='up',foo=9999999,state='fixed',lastpos;
$(窗口)。滚动(功能(事件){
var st=$(this.scrollTop();
//if(Math.abs(lastScrollTop-st)lastScrollTop){
//向下滚动
如果(最后一个==“向上”){
如果(状态==‘固定’){
lastpos=(document.documentElement.scrollTop-1);
$(“#header”).css({'position':'absolute','top':lastpos});
状态='绝对';
}
last=‘down’;
}
}否则{
//向上滚动
让posnow=document.documentElement.scrollTop
如果((posnow-lastpos)>50 | |(posnow-lastpos)<0){
如果(最后一个==“向下”){
foo=posnow-51;
$(“#header”).css({'position':'absolute','top':foo});
}否则{
如果(foo>st){
$(“#header”).css({'position':'fixed','top':'0'});
状态='固定'
}
}
}   
last=‘向上’;
}
lastScrollTop=st;
});
});

这是我现在得到的最接近的结果:

除此之外,它的性能非常糟糕,而且可能没有太多的方法可以解决这个问题,它也没有很好地工作:当你向下滚动使整个导航栏隐藏,然后向上滚动一点,使其只显示一小部分,然后再向下滚动,保留一小部分导航栏,然后再往上走——它跳了一点,这是不应该的。我知道为什么会这样,但我现在找不到解决办法。也许你们中的某个人可以

*编辑:事实上,现在我在我的网站上运行它,我没有注意到太多的糟糕性能-是的,它需要很多,但我认为它可能是值得的:)可能会注意到在硬件较低的设备上

$(function(){
var lastScrollTop = 0, delta = 5, last = 'up', foo = 99999999, state = 'fixed', lastpos;
$(window).scroll(function(event){
   var st = $(this).scrollTop();

   // if(Math.abs(lastScrollTop - st) <= delta) return;

   if (st > lastScrollTop){      
       // scrolling down
       if(last == 'up') {
            if (state == 'fixed') {
                lastpos = (document.documentElement.scrollTop - 1);
              $("#header").css({'position': 'absolute', 'top': lastpos});
              state = 'absolute';
          }
          last = 'down';
       }
   } else {
       // scrolling up
       let posnow = document.documentElement.scrollTop
       if ((posnow - lastpos) > 50 || (posnow - lastpos) < 0) {
           if (last == 'down') {
               foo = posnow - 51;
               $("#header").css({'position': 'absolute', 'top': foo});

           } else {
              if (foo > st) {
                  $("#header").css({'position': 'fixed', 'top': '0'});
                  state = 'fixed'
              }
           }
        }   
                last = 'up';
   }
   lastScrollTop = st;

});
});
$(函数(){
var lastScrollTop=0,delta=5,last='up',foo=9999999,state='fixed',lastpos;
$(窗口)。滚动(功能(事件){
var st=$(this.scrollTop();
//if(Math.abs(lastScrollTop-st)lastScrollTop){
//向下滚动
如果(最后一个==“向上”){
如果(状态==‘固定’){
lastpos=(document.documentElement.scrollTop-1);
$(“#header”).css({'position':'absolute','top':lastpos});
状态='绝对';
}
last=‘down’;
}
}否则{
//向上滚动
让posnow=document.documentElement.scrollTop
如果((posnow-lastpos)>50 | |(posnow-lastpos)<0){
如果(最后一个==“向下”){
foo=posnow-51;
$(“#header”).css({'position':'absolute','top':foo});
}否则{
如果(foo>st){
$(“#header”).css({'position':'fixed','top':'0'});
状态='固定'
}
}
}   
last=‘向上’;
}
lastScrollTop=st;
});
});

这正是我目前正在做的事情,如果不清楚的话,很抱歉。但我不想要整个na