【问题标题】:Change background color if position fixed如果位置固定,则更改背景颜色
【发布时间】:2015-01-11 10:27:25
【问题描述】:

我有一个简单的导航,用于在向下滚动时隐藏固定的标题。当您向上滚动时,它将重新出现以便于导航。效果很好!但是,我需要对其进行一些更改,但不知道如何实现。

当位置固定在页面的绝对顶部时,我需要标题是透明的。当位置向下滚动然后向上滚动一点。我需要背景为蓝色,直到它达到绝对顶部,然后再次变为透明。

http://codepen.io/anon/pen/VYPGyg

这里是有问题的 jQuery:

var didScroll;
            var lastScrollTop = 0;
            var delta = 5;
            var navbarHeight = $('header').outerHeight();

        $(window).scroll(function(event){
            didScroll = true;
        });

        setInterval(function() {
            if (didScroll) {
                hasScrolled();
                didScroll = false;
            }
        }, 250);

        function hasScrolled() {
            var st = $(this).scrollTop();

            // Make sure they scroll more than delta
            if(Math.abs(lastScrollTop - st) <= delta)
                return;

            // If they scrolled down and are past the navbar, add class .nav-up.
            // This is necessary so you never see what is "behind" the navbar.
            if (st > lastScrollTop && st > navbarHeight){
                // Scroll Down
                $('header').removeClass('nav-down').addClass('nav-up');
            } else {
                // Scroll Up
                if(st + $(window).height() < $(document).height()) {
                    $('header').removeClass('nav-up').addClass('nav-down');
                }
            }

            lastScrollTop = st;
        }

任何帮助都会很棒!

【问题讨论】:

  • 你不能使用css规则吗?有类时一种,无类一种
  • 以下是您要查找的内容吗?你的一些问题对我来说有点不清楚——不确定你是否需要应用中间样式

标签: javascript jquery


【解决方案1】:

我会使用您的 nav-downnav-up 课程,因为无论如何它们都会被添加。当您使用 CSS 处理样式时,您(通常)可以更好地在软件的各个方面分离关注点。 CSS 通常应该处理表示,除非它的功能有限或不够编程(输入 javascript)。

例如,使用 .nav-down 类并调整透明度:

更新的代码笔:

http://codepen.io/anon/pen/YPNOLM

为您的函数添加了一些逻辑:

 function hasScrolled() {
            var st = $(this).scrollTop();

            // Make sure they scroll more than delta
            if(Math.abs(lastScrollTop - st) <= delta)
                return;

            // If they scrolled down and are past the navbar, add class .nav-up.
            // This is necessary so you never see what is "behind" the navbar.
            if (st > lastScrollTop && st > navbarHeight){
                // Scroll Down
                $('header').removeClass('nav-down').addClass('nav-up');
            } else {
                // Scroll Up
                if(st + $(window).height() < $(document).height()) {
                    $('header').removeClass('nav-up').addClass('nav-down');
                }
              // the 100 can be whatever height you think it should be at
                if($(window).scrollTop() > 100) {
                  $('header').addClass('notTop')
                } else {
                 $('header').removeClass('notTop')                     
                }
            }

            lastScrollTop = st;
        }

还有一个不透明度属性:

header.nav-down {
  position: fixed;
  width: 100%;
  top: 0;
  transition: top 0.2s ease-in-out;
  z-index: 1;
  background: #fff;
  padding: 25px 0px 0px 0px;
  opacity: 0.8
}

还有:

header.nav-down.notTop {
  background-color: blue
}

【讨论】:

  • 不确定您的意思。 .nav-up 仅用于在向下滚动时隐藏导航栏。当导航向上滚动时,.nav-down 再次显示。我同意我认为我可以在这里使用 CSS 并愿意这样做。
  • 如果不清楚,请见谅;我会试着澄清一下。你想要三个状态(在绝对顶部,就在它下面,向下滚动时)还是两个?我用我认为你的意思更新了 codepen:codepen.io/anon/pen/YPNOLM
  • 查看更新的答案;它不像我通常喜欢的那样特别干净或功能强大,但我不想对你的代码持固执己见;这应该可以工作如果我理解正确
  • 是的!这正是我一直在寻找的!如果您有任何意见或建议可以通过各种方式使其更清洁或更好,我很乐意听到!
  • 太棒了!我可以重构 codepen 并发布一些简化它的方法。你可以拿走也可以离开,但它们会更实用,而且更容易推理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多