javascript - ".hasClass"if 语句不起作用

标签 javascript jquery html css

<nav id="navbar-main" class="navbar navbar-default navbar-static-top main-nav" data-spy="affix" data-offset-top="100">
    <div class="container-fluid">
    <div class="navbar-header">
    <a class="navbar-brand" href="#"><img id="#head-logo" src="images/logo.png"></a>
</div>

当从顶部滚动并添加一个类时,上面的导航栏会发生变化 - “affix”,当导航栏具有类“affix”时,我想更改 navbar-brand 内图像的来源。 但以下不起作用 -

$(document).ready(function() {
       if ($("#navbar-main").hasClass('affix')) {
          $(".navbar-brand img").attr('src','second.jpg');
    }
    else {
       $(".navbar-brand img").attr('src','images/logo.png');
    }
});

以下作品 -

   $(window).scroll(function (){
       var navscroll = $(window).scrollTop();
       if(navscroll >= 50) {
          $(".navbar-brand img").attr('src','second.jpg');
    }
    else {
       $(".navbar-brand img").attr('src','images/logo.png');
    }
});

最佳答案

如果在滚动时添加/删除类,您需要将代码放入 scroll 回调中,并在添加类后 运行它/删除(如果您将更改基于类)。 ready 仅在页面加载和解析时运行一次。

例如,您可以这样做:

function updateLogo() {
    if ($("#navbar-main").hasClass('affix')) {
          $(".navbar-brand img").attr('src','second.jpg');
    }
    else {
       $(".navbar-brand img").attr('src','images/logo.png');
    }
}
$(updateLogo);
$(window).on("scroll", updateLogo);

...但前提是您知道执行类更新的代码已经注册了它的 scroll 处理程序(因为处理程序是按顺序执行的,所以如果它已经在上面的代码之前注册了运行,你的注册之后)。如果您不知道,您需要做一些事情来确保在类更新后调用 updateLogo


来自您的评论:

I don't want to make it work using scroll, but when the class changes...

没有“on class change”事件。您必须确定是什么导致类更改,然后触发任何内容。或轮询(blech)。 :-)

或者做一些理性的事情并使用 CSS 而不是为自己做更多的工作。 :-)

img.affixed {
    display: none;
}
.affix img.normal {
    display: none;
}
.affix img.affixed {
    display: inline;
}

...其中 img class="normal"images/logo.png 图像,img class="affixed"second.jpg 图片。

关于javascript - ".hasClass"if 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962614/

相关文章:

php - 在 PHP 打印 : quotes 上带有 vars 的 Javascript 函数

javascript - 为什么 PhoneGap Android 应用程序在将大量数据插入 SQL 时崩溃?

jquery - 多个光滑 slider 问题

html - 如何在HTML文件中查看 '\t'(制表符)标志?

javascript - 当浏览器窗口缩小/移动时 Canvas 点击事件搞砸了

javascript - 为什么我只点击了一个复选框,却调用了所有复选框的点击事件?

javascript - 位置固定 - 水平滚动

jquery - 在 keydown *not* keyup 上获取 .val()

html - d3 : Brush with an input field

javascript - 表单验证事件中不会出现失败消息