【问题标题】:Bootstrap scrolling navbar issuesBootstrap 滚动导航栏问题
【发布时间】:2014-10-27 19:11:27
【问题描述】:

我正在开发的网站:zarwanhashem.com

你可以在这里找到我之前的问题(包括我的代码):Bootstrap one page website themev formatting problems

选择的答案解决了我的问题,但由于使用 -50 的 jQuery 调整,我遇到了另一个问题。现在导航栏错误地指示我所在的页面。即导航栏应该使您当前所在的部分变暗。因此,如果您单击“关于”,它将带您到“关于”页面并使导航栏中的“关于”链接变暗。但是您所在页面之前的链接被突出显示,因为 -50 使导航栏认为它在上一节中。您可以轻松地尝试一下,看看我的意思。

我该如何解决这个问题?谢谢。我没有将其添加到旧问题中的原因是该人不再看它。

另外,请保持您的解释简单/对我来说稍微简化一下。我知道非常基本的 HTML 和 CSS,但我不会任何 Javascript。

滚动js:

//jQuery to collapse the navbar on scroll
$(window).scroll(function() {
    if ($(".navbar").offset().top > 50) {
        $(".navbar-fixed-top").addClass("top-nav-collapse");
    } else {
        $(".navbar-fixed-top").removeClass("top-nav-collapse");
    }
});

//jQuery for page scrolling feature - requires jQuery Easing plugin
$(function() {
    $('a.page-scroll').bind('click', function(event) {
        var $anchor = $(this);
        $('html, body').stop().animate({
            scrollTop: $($anchor.attr('href')).offset().top -50
        }, 1500, 'easeInOutExpo');
        event.preventDefault();
    });
});

按照前一个问题中海报的建议,在文档末尾添加了 js:

$(window).ready(function(){
    $('div[class^="content-section"]').css('min-height', $(window).height());
    })

【问题讨论】:

    标签: javascript jquery html css twitter-bootstrap


    【解决方案1】:

    您以某种方式将 .active 类放在了错误的元素上。您需要将 .active 类放在单击的元素上。您应该使用 js 处理活动状态。这是我基于您的 HTML 结构的解决方案,但我相信也有不同的解决方案。

    $(document).on('click', '.page-scroll', function(event) {
       var clicked = event.target; //get the clicked element
       if($(clicked).closest('ul').hasClass('dropdown-menu')){ //check if clicked element is inside dropdown
          $(clicked).closest('ul').parent().siblings().removeClass('active'); //remove active class from all
          $(clicked).closest('ul').parent().addClass('active'); add active class on clicked element parent - in your case <li> tag.
       }else{
          $(clicked).parent().siblings().removeClass('active');
          $(clicked).parent().addClass('active');
       }
    }
    

    让我知道这是否适合你。

    发布代码后进行编辑

    尝试用这个替换你的函数:

    $(function() {
        $('a.page-scroll').bind('click', function(event) {
            var $anchor = $(this);
            $('html, body').stop().animate({
                scrollTop: $($anchor.attr('href')).offset().top -50
            }, 1500, 'easeInOutExpo');
    
            if($($anchor).closest('ul').hasClass('dropdown-menu')){
               $($anchor).closest('ul').parent().siblings().removeClass('active'); 
               $($anchor).closest('ul').parent().addClass('active'); 
            }else{
               $($anchor).parent().siblings().removeClass('active');
               $($anchor).parent().addClass('active');
            }
            event.preventDefault();
        });
    });
    

    【讨论】:

    • 它修复了突出显示问题,但它向下滚动太远(部分页面被切断)。而且滚动动画现在也消失了。我是否应该将它添加到滚动 js 文件的末尾?我就是这么做的。
    • 我不知道你的 scrolling.js 文件,但把代码放在那里听起来不对。该代码与滚动无关。你应该把它放在你的主 js 文件中,如果你有一个或在你的 html 代码的底部,就在结束 &lt;/body&gt; 标记包裹在 &lt;script&gt;&lt;/script&gt; 标记之前。为了不破坏滚动代码,您应该在 main.js 之前包含您的 scrolling.js(如果您没有 main.js,则在代码之前)。
    • 我试过了,它又回到了原来的样子(好像我从来没有做过任何改变)。我在第一篇文章中添加了我正在使用的js。
    • 问题稍有变化,类似问题。如果你去网站,你可以看到它。我发布的第一块 js 是滚动导航文件。第二部分位于我的 index.html 文件底部的脚本标记中,建议在我的上一个问题中解决该问题(链接在我的帖子中)。我用你的替换了滚动导航代码(但不是缩小导航栏的部分)。滚动在完美的位置停止,但阴影仍然不稳定。
    • 滚动条上的 -50px 为你制造了混乱。我看不出你有那些-50px的原因。如果您认为导航栏会与您的内容重叠,我会删除它并将您的内容向下推送 50 像素。删除 50px 后,它应该可以按您的意愿工作。
    【解决方案2】:

    这里有一个解决这个问题的方法。 只需将 scrolling-nav.js 的内容更改为以下内容:

    //jQuery to collapse the navbar on scroll
    $(window).scroll(function() {
    if ($(".navbar").offset().top > 50) {
        $(".navbar-fixed-top").addClass("top-nav-collapse");
    } else {
        $(".navbar-fixed-top").removeClass("top-nav-collapse");
    }
    });
    
    //jQuery for page scrolling feature - requires jQuery Easing plugin
    $(function() {
    $('a.page-scroll').bind('click', function(event) {
        var $anchor = $(this);
        $('html, body').stop().animate({
            scrollTop: $($anchor.attr('href')).offset().top -50
        }, 1500, 'easeInOutExpo', function(){
            $('ul.navbar-nav li, ul.dropdown-menu li').removeClass('active');
            $($anchor).parent('li').addClass('active');
        });
        event.preventDefault();
    }); 
    });
    

    【讨论】:

    • 我试过了,它可以工作,但有点小问题。如果您现在查看该站点,您会明白我的意思(我保留了调整)。使用 about 链接时,褪色来了又去,项目按钮本身没有阴影,只有下拉组件。
    • 解决这个问题的唯一方法是修改 bootstrap.min.js,你可以通过使用 bootstrap.js 文件来做到这一点,然后你必须更改处理导航栏突出显示的函数,尽管我不推荐此解决方案,因为您以后更新引导程序时会遇到问题。
    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2020-04-30
    相关资源
    最近更新 更多