【问题标题】:Catch a div while scrolling to fix its position滚动时捕获 div 以固定其位置
【发布时间】:2016-05-17 02:58:07
【问题描述】:

我试图有一个固定的垂直导航栏,但只有在用户向下滚动到它时。我已将其放置在标题下方 66px 处,一旦用户向下滚动到其 66px 边距并保持固定在屏幕上,我就需要抓住它,我已经接近但您可以看到它并不完美。 https://jsfiddle.net/1krd9zpc/7/

$(window).on('scroll', function() {
if($(window).scrollTop() > $('#navbox').offset().top){
    $('#navbox').css({
        'top': $(window).scrollTop() > 0 ? '0px' : '66px',
        'position': 'fixed'
    });
 }
});

这段代码(由 Mathias W 改进)可以正常工作,当我们向上滚动时,它需要重置到之前的位置。

【问题讨论】:

  • “抓住我的导航栏”是什么意思?
  • 似乎您需要在滚动时修复菜单,因此您需要为它使用固定位置..
  • 我想你需要这个,对吧? stackoverflow.com/questions/14667829/…
  • 抱歉,写的时候有点累,有点难以解释。是的,它很相似,但有点不同。导航的基础永远不会改变它的位置,只有当我们向下滚动来捕捉它时。它必须始终在该黑框下方 66 像素,但一旦从屏幕顶部滚动也被捕获 66 像素。
  • 所以.. 只是想看看我是否理解... 红框应始终低于黑框或窗口顶部 66 像素,以较大者为准?

标签: javascript jquery html css


【解决方案1】:

您必须应用 css 属性位置并将其值设置为固定(位置:固定)。

$(window).on('scroll', function() {
  $('#navbox').css({
      'top': $(window).scrollTop() > 0 ? '0px' : '66px',
      'position': 'fixed'
      });
});

见小提琴:

https://jsfiddle.net/3g52v5oh/

如果您只想在滚动时到达元素后“抓住它”,您可以使用 $('#navbox').offset().top 检查 navbox 的偏移位置

$(window).on('scroll', function() {
    if($(window).scrollTop() > $('#navbox').offset().top){
        $('#navbox').css({
            'top': $(window).scrollTop() > 0 ? '0px' : '66px',
            'position': 'fixed'
        });
    }
});


接受答案的更新

将导航框的顶部偏移保存到一个变量中,然后检查窗口的 scrollTop 值是少还是多

var navboxHeight = $('#navbox').offset().top;
$(window).on('scroll', function() {
    if($(window).scrollTop() > navboxHeight){
        $('#navbox').css({
            'top': $(window).scrollTop() > 0 ? '0px' : '66px',
            'position': 'fixed'
        });
    }
    // Reset navbox to it's default position
    if($(window).scrollTop() < navboxHeight){
        $('#navbox').css({
            'top': '',
            'position': 'static'
        });
    }
});

【讨论】:

  • 我很感谢帮助的人,非常接近。对不起,当我写的时候我很累,需要更清楚。它需要始终位于黑框下方 66 像素处,并且一旦向下滚动以捕捉它,则位于屏幕下方 66 像素处。因此,即使您向上滚动到顶部,它也会被释放,明白我的意思吗?有点难以解释。
  • 你就是那个男人。非常感谢:) ...无关的问题。你在哪里学习编写 javascript?我需要好好学习。
  • No probs mate :) 我只是在自我思考——边做边学。我真的没有任何我从中学到最多的知识来源,但我认为 codecademy 和 codeschool 是非常可靠的网站。只要提出一个想法,然后努力去创造它,你就会学到很多东西。
  • 是的,这也是我学习大部分 html/css 知识的方式,一旦你掌握了基础知识,它只会从那里提高你的知识。一旦这个项目完成了,我会继续努力的,干杯:)。
猜你喜欢
  • 2014-03-19
  • 2013-04-01
  • 2015-12-30
  • 2015-05-04
  • 2016-12-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多