滚动后更改导航栏颜色?

IT技术 javascript jquery html css twitter-bootstrap
2021-02-03 17:43:18

如何设置没有背景颜色的导航栏?

在 div 之后向下滚动时,导航栏会获得新的背景颜色(导航栏应该固定在顶部,我navbar-fixed-top在 Bootstrap 中使用

我尝试了一些教程,但没有成功。

这是网站:http : //attafothman.olympe.in/
我说的是顶部的黑色导航栏。

6个回答

这是如何在窗口滚动后更改导航栏颜色的最简单方法:

添加follow JS到head:

$(function () {
  $(document).scroll(function () {
    var $nav = $(".navbar-fixed-top");
    $nav.toggleClass('scrolled', $(this).scrollTop() > $nav.height());
  });
});

和这个 CSS 代码

.navbar-fixed-top.scrolled {
  background-color: #fff !important;
  transition: background-color 200ms linear;
}

当滚动超过导航栏的高度时,固定导航栏的背景颜色将变为白色。

查看关注JsFiddle

问候!我已经喜欢这种方法有一段时间了,但是使用最新的 Bootstrap 5 不知何故,“滚动”类在滚动后不适用于导航栏,这可能是因为在 v5 中如何调用 jQuery。关于如何调整这方面的任何想法?谢谢!
2021-03-20 17:43:18
你好 !我只是想为将来来到这里的任何人添加:不要忘记添加“.navbar-fixed-top{ transition:background-color 200ms linear; }” 这样当你向上滚动时就没有 insta-backgroundcolor
2021-03-29 17:43:18
当我单击以展开导航栏时,如何使用此功能来更改导航栏的颜色?
2021-04-04 17:43:18
哇这个解决方案是纯粹的天才......如此简单且有效。谢谢你。
2021-04-09 17:43:18

这是一个jsfiddle 示例使用 Jquery 根据滚动像素位置更改背景颜色。

这是使用引导程序小提琴

$(document).ready(function(){       
   var scroll_start = 0;
   var startchange = $('#startchange');
   var offset = startchange.offset();
    if (startchange.length){
   $(document).scroll(function() { 
      scroll_start = $(this).scrollTop();
      if(scroll_start > offset.top) {
          $(".navbar-default").css('background-color', '#f0f0f0');
       } else {
          $('.navbar-default').css('background-color', 'transparent');
       }
   });
    }
});
嘿,这很好用,但是 scroll_start > 70 我不得不将 70 更改为 950 在其他显示器上尝试后,它的背景颜色更改的位置不一样..
2021-03-15 17:43:18
奇怪的!我以为这会解决它,但是当我更改导航器大小时,通过 #startchange 后背景颜色会发生变化 .. btw jumbotron 高度:100vh;这可能是一个问题?
2021-03-15 17:43:18
嗯...让我尝试在我的引导程序示例中实现它
2021-03-29 17:43:18
new js fiddle这将允许您在 html 中使用 id,例如 <p> 或 <div>,来设置更改高度而不是设置像素值
2021-04-05 17:43:18
让我尝试编辑小提琴以使用偏移量,当我更改它时我会发布一个链接
2021-04-11 17:43:18

这是一个简单的纯 javascript

var myNav = document.getElementById('mynav');
window.onscroll = function () { 
    "use strict";
    if (document.body.scrollTop >= 200 ) {
        myNav.classList.add("nav-colored");
        myNav.classList.remove("nav-transparent");
    } 
    else {
        myNav.classList.add("nav-transparent");
        myNav.classList.remove("nav-colored");
    }
};

在某些 chrome 版本中存在以下错误:

document.body.scrollTop

所以你可以添加这样的条件:

 if (document.body.scrollTop >= 200 || document.documentElement.scrollTop >= 200 )

确定你必须有 2 个class

.nav-colored { background-color:#000; }
.nav-transparent { background-color:transparent;}
这是一个很好的纯JS解决方案,但else部分应该是:.add("nav-transparent");.remove("nav-colored");
2021-04-11 17:43:18

我认为这个解决方案比旧的答案更短更简单。这是 Js 代码:

const navbar = document.querySelector('.nav-fixed');
window.onscroll = () => {
    if (window.scrollY > 300) {
        navbar.classList.add('nav-active');
    } else {
        navbar.classList.remove('nav-active');
    }
};

还有我的 css:

header.nav-fixed {
    width: 100%;
    position: fixed;
    transition: 0.3s ease-in-out;
}

.nav-active {
    background-color:#fff;
    box-shadow: 5px -1px 12px -5px grey;
}

今天我遇到了同样的问题,如何将导航栏背景颜色更改为滚动我正在寻找一个只使用 CSS 的解决方案,没有 jquery,没有 bootstrap 或 javascript。但后来发现仅使用 CSS 还无法完成(截至今天 2019 年 12 月)并且必须选择,我将坚持使用核心技术 - javascript 而不是 jquery 或 bootstrap,除非它使用 js 比其他人复杂得多。但幸运的是,事实并非如此。

这是代码:
- 它使用onscroll/ scrollevent ofwindow来触发事件侦听器。
- 在事件监听器中,使用pageYOffset/ scrollYofwindow来检查滚动状态。

两者之间的浏览器支持似乎相同:
- https://caniuse.com/#search=pageYOffset
- https://caniuse.com/#search=scrollY

var navbar = document.querySelector('nav')

window.onscroll = function() {

  // pageYOffset or scrollY
  if (window.pageYOffset > 0) {
    navbar.classList.add('scrolled')
  } else {
    navbar.classList.remove('scrolled')
  }
}
body {
  margin: 0;
  padding: 0;
  background: url(https://occ-0-325-395.1.nflxso.net/dnm/api/v6/6AYY37jfdO6hpXcMjf9Yu5cnmO0/AAAABaKr-dQAdVTt7fuGCgzntgBBrFce2DMW72dF86eO7EnXbFZvzmX2TPnQAg3HwAsvt7ZnDnP0nwuHOtPwpWGGOE22fXq2.webp?r=847) top/contain no-repeat;
}

nav {
  position: -webkit-sticky;
  position: sticky;
  /* sticky or fixed are fine */
  position: fixed;
  top: 0;
  height: 69px;
  width: 100%;
  background: linear-gradient(to bottom, #000, #0003 70%,#0000); /* background when scroll is in the top */
  transition: background .5s; /* control how smooth the background changes */
}

nav.scrolled {
  background: #0a0a0a;
}

main {
  height: 200vh;
}
<nav></nav>
<main></main>