javascript - 如果滚动到达某个元素,则 CSS 固定导航栏应用新样式

标签 javascript jquery html css twitter-bootstrap

我有一个固定的 bootstrap navnar,它是透明的。

现在,当我滚动并且导航栏到达具有 ID services 的特定元素时,我希望这种样式发生变化。

我尝试使用高度,但不知何故,当我滚动时,值不会更新。 我希望导航栏在开始时是透明的,如果它到达 service 容器,它应该变成彩色的。

我的尝试:

$(window).on('scroll',function(){
    var service_height = $('#service').outerHeight()
    var navbar_height = $('.mynavbar').outerHeight()
    console.log("service" + service_height);
    console.log("navbar" + navbar_height);
    // we round here to reduce a little workload
    //stop = Math.round($(window).scrollTop());
    if (navbar_height >= service_height) {
        $('.mynavbar').addClass('past-main');
    } else {
        $('.mynavbar').removeClass('past-main');
   }

});

我想要的: enter image description here

最佳答案

您的方法很奇怪,您正在尝试比较导航栏的高度和服务部分的高度,并基于该添加或删除类。

您应该获取服务部分相对于文档的当前顶部位置,并将其与当前滚动位置进行比较。

您可以使用 offset()scrollTop() jQuery 函数。

var trigger;

$(window).scroll(function() {

  trigger = $('#section-3').offset().top - $('.navbar').height();

  if ($(this).scrollTop() > trigger) {
    $('.navbar').addClass('bg');
  } else {
    $('.navbar').removeClass('bg');
  }

});

CODEPEN

关于javascript - 如果滚动到达某个元素,则 CSS 固定导航栏应用新样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062275/

相关文章:

javascript - 从其他地方开始下一行

javascript - 使用 JQuery 在按下按钮时自动播放全屏 YouTube 视频

javascript - 如何在文本区域显示来自服务器的数据

javascript - 我在一个页面中创建多个 slider ...但如果幻灯片的数量彼此不同,则无法获得正确的停止位置

javascript - 对 globalCompositeOperation 感到困惑

javascript - 无法在 'postMessage' : The target origin provided does not match the recipient window's origin 'DOMWindow' ) 上执行 ('null'

javascript - 如何根据 ID、使用 javascript、点击按钮加载不同的 YouTube 视频?

javascript - For 循环不会将 i 变量传递给循环内的 Jquery 函数

javascript - 如何提取 javascript 生成的 DOM 对象的 html 代码?

javascript - 提交时截取表单