javascript - 当相应的 div 滚动到时,将类添加到适当的导航选项卡

标签 javascript jquery angularjs scroll navigation

我读过类似的问题并研究了滚动 spy ,但我不相信它能完全满足我的要求,因为据我所知它只能使用引导样式突出显示。 (如果它可以做更多,请告诉我!)

我有一个 4 选项卡导航栏(通常固定在顶部)和一个单页网站。每个选项卡对应于页面的不同部分,并且每个部分具有不同的背景颜色。我想做的是,每当该区域滚动到时,将选项卡颜色更改为与相应部分的背景颜色相同(因此,只有当新部分的顶部到达导航栏的底部时,它才会更改颜色。)我已经实现了这一点仅在单击选项卡时生效,触发滚动事件并添加事件类,但是如果不使用单击,则事件选项卡将保留,从而产生问题。

有没有办法根据当前滚动位置更改变量?我已经尝试了我能想到的,但还没有成功。

JS

$(window).on('scroll', function () {
            if ($(window).scrollTop() >= $('#homeContainer').height()) {
                $('.menuDiv').addClass('fixed');
            } else {
                $('.menuDiv').removeClass('fixed');
            }
        });


$("#menuHomeButton").click(function(e){
            $('html, body').animate({
                scrollTop: $('#homeContainer').offset().top
            }, 'slow');
        });

        $("#menuAboutButton").click(function(e){
            $('html, body').animate({
                scrollTop: $('#aboutContainer').offset().top + 1
            }, 'slow');
        });

        $("#menuPortfolioButton").click(function(e){
            $('html, body').animate({
                scrollTop: $('#portfolioContainer').offset().top - $('.menuDiv').height() + 1
            }, 'slow');
        });

        $("#menuContactButton").click(function(e){
            $('html, body').animate({
                scrollTop: $('#contactContainer').offset().top - $('.menuDiv').height() + 1
            }, 'slow');
        });

HTML

<div class="mainContainer">

    <div class="container blue" id="homeContainer">
    </div>
    <div class="menuDiv"><!--
            --><div class="menuItem" id="menuHomeButton" ng-class="{'active':selectedTab === 'home'}" ng-click="selectedTab = 'home'">
        <div class="menuTextDiv"><p>Home</p></div><div class="menuItemColor blue"></div>
    </div><!--
            --><div class="menuItem" id="menuAboutButton" ng-class="{'active2':selectedTab === 'about'}" ng-click="selectedTab = 'about'">
        <div class="menuTextDiv"><p>About</p></div><div class="menuItemColor blue2"></div>
    </div><!--
            --><div class="menuItem" id="menuPortfolioButton" ng-class="{'active3':selectedTab === 'portfolio'}" ng-click="selectedTab = 'portfolio'">
        <div class="menuTextDiv"><p>Portfolio</p></div><div class="menuItemColor blue3"></div>
    </div><!--
            --><div class="menuItem" id="menuContactButton" ng-class="{'active4':selectedTab === 'contact'}" ng-click="selectedTab = 'contact'">
        <div class="menuTextDiv"><p>Contact</p></div><div class="menuItemColor blue4"></div>
    </div><!--
        --></div>
    <div class="container blue2" id="aboutContainer">
    </div>
    <div class="container blue3" id="portfolioContainer">
    </div>
    <div class="container blue4" id="contactContainer">
    </div>
    <div class="container">
    </div>

</div>

这是一个fiddle ,但由于某种原因,我无法让 ng-click 和 ng-class 对其进行处理,这会更改选项卡颜色。

以下是一些不在 js fiddle 上显示的图像: 我想要和拥有的: http://i.gyazo.com/3c7d6d80a9a490b31e795cacebbaa1a0.png http://i.gyazo.com/1bd597080bdba6ffa34fe18cf5462b74.png 我不想要但仍然有:http://i.gyazo.com/d066effabd276d978e4775666a3b5d6c.png

如果有人有解决方案,我将非常感激!谢谢!

最佳答案

获取 div 距顶部的距离:

distance = $("div").scrollTop()

note: do not use var when declaring distance because than you can't access it inside a function

然后检查div是否已到达顶部并添加class:

$(window).on('scroll', function () { 
    if(distance - $("div").scrollTop() >= distance ){
        //do something
    } 
}); 

关于javascript - 当相应的 div 滚动到时,将类添加到适当的导航选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861085/

相关文章:

javascript - 谷歌加登录复选框

javascript - Joomla 2.5 组件。保存前非阻塞模式

javascript - 双击 JQuery

javascript - 为什么我的每个类使用的 jQuery 片段不支持 setTimeout?

javascript - Angular 表达式不显示值

html - 如果仅在输入字段外单击而不是在填充文本框时输入无效,如何将边框颜色变为红色?

jquery - 多级下拉,侧边菜单在 ng-cloak 中不起作用

jquery - Twitter Bootstrap : modal fade

javascript - 如何使用 fadeIn 与 css 属性更改 jquery

javascript - 带有表单条件的 ng-show 不适用于 AngularJS 中的指令模板