具有多个导航栏的Bootstrap Scrollspy

时间:2013-09-19 22:22:27

标签: jquery twitter-bootstrap navbar scrollspy

Here is a fiddle

由于in this question about creating a responsive nav menu描述的问题,我需要有两个相同的导航元素,一个对于小屏幕可见,另一个对于大屏幕可见。

但是,我希望使用scrollspy跟踪并同时应用.active个类。为简单起见,我们假设我们有两个相同的导航,如下所示:

<div class="scrollspy navbar">
    <nav class="nav">
        <li><a href="#option1">Option 1</a></li>
        <li><a href="#option2">Option 2</a></li>
        <li><a href="#option3">Option 3</a></li>
        <li><a href="#option4">Option 4</a></li>
        <li><a href="#option5">Option 5</a></li>
    </nav>
</div>

然后是内容:

<div class="content">
    <section id="option1">1</section>
    <section id="option2">2</section>
    <section id="option3">3</section>
    <section id="option4">4</section>
    <section id="option5">5</section>
</div>

然后调用scrollspy:

$(".wrapper").scrollspy({ target: ".scrollspy" });

你会在fiddle中看到活动类混乱,并在两个导航上来回闪烁。但是,如果从其中一个导航中删除scrollspy类,则另一个可以正常工作。这可以解决吗?

4 个答案:

答案 0 :(得分:3)

这是修复我的朋友。它有点满口,所以如果有人有更直接的解决方案,请继续。与此同时,这将得到解决。

$(document).ready(function () {
    $(".wrapper").scrollspy({ target: ".scrollspy" });

    var scollSpy2ActiveLI = "";

    $('.wrapper').on('activate.bs.scrollspy', function () {
        if (scollSpy2ActiveLI != "") {
            scollSpy2ActiveLI.removeClass('active');            
        }        
        var activeTab = $('.scrollspy li.active a').attr('href');
        scollSpy2ActiveLI = $('.scrollspy2 li a[href="' + activeTab + '"]').parent();
        scollSpy2ActiveLI.addClass('active');
    })

    $('.wrapper').trigger('activate.bs.scrollspy');
});

注意我使用.scrollspy2作为您的第二个导航。

这是小提琴:http://jsfiddle.net/jofrysutanto/MUpz5/1/

答案 1 :(得分:2)

这个解决方案对我不起作用,因为我有两个不相同的导航并且内部没有相同的锚链接。 (.scrollspy1中的活动链接不一定在.scrollspy2中有相应的双胞胎)

然而,简单:

$(".wrapper").scrollspy({ target: ".scrollspy, .scrollspy2" });

足以解决闪烁的问题。

答案 2 :(得分:0)

如果您提供空目标,则所有导航都有效:https://stackoverflow.com/a/23937735

我自己测试过。一个令人惊讶的解决方案。

答案 3 :(得分:0)

使用id代替类。

mock