Comment utiliser Bootstrap scroll spy?

Je n'arrive pas à faire fonctionner correctement le scroll spy avec un nav vertical. Vous trouverez ci-dessous le code que j'utilise. Pour une raison quelconque, seulement "deux" devient actif.

quelqu'un a une idée de ce qui est mal?

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Twitter Bootstrap Scroll Spy Playground</title>
    <link href="bootstrap/css/bootstrap.css" rel="stylesheet">
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="span3">
            <ul class="navbar nav nav-list affix">
              <li class="active"><a href="#one">One</a></li>
              <li><a href="#two">Two</a></li>
            </ul>
        </div>
        <div class="span1" data-spy="scroll">
            <section id="one">
            <h1>One</h1>
            <h2>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. </h2>
            </section>
            <section id="two">
            <h1>Two</h1>
           <h2>Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</h2>
            </section>   
        </div>
      </div>
    </div>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script src="bootstrap/js/bootstrap.js"></script>
</body>
</html>
26
demandé sur cvrebert 2012-10-30 10:49:33

8 réponses

Dans le tri pour moi-même, j'ai trouvé que l'élément d'être épié besoin d'avoir une barre de défilement.

jetez un oeil à ce Violon: http://jsfiddle.net/adamp/qgU6h/1/

Vous pouvez soit espion directement sur l'élément de corps ($('body').scrollspy()) ou donnez à votre contenu une hauteur explicite et forcez-le à afficher une barre de défilement.

(Si vous regardez le Bootstrap exemple de documentation, il fait la hauteur fixe astuce.)

36
répondu adam-p 2013-10-18 17:33:11

vous pouvez faire cela comme http://jsfiddle.net/mCxqY/

<body data-spy="scroll" data-target="#navbar">
    <div id="post1" class="box">
        <h1>Post 1</h1>
        <p> Scroll Down↓</p>
    </div>
    <div id="post2" class="box"><h1>Post 2</h1></div>
    <div id="post3" class="box"><h1>Post 3</h1></div>

    <div id="navbar">
        <ul class="nav">
            <li><a href="#post1">Post 1</a></li>
            <li><a href="#post2">Post 2</a></li>
            <li><a href="#post3">Post 3</a></li>
        </ul>
    </div>

    <script src="http://twitter.github.com/bootstrap/assets/js/bootstrap-scrollspy.js"></script>
</body>​

css

@import url(http://twitter.github.com/bootstrap/assets/css/bootstrap.css);
.box{
    margin: 20px; padding: 15px;
    background: #eee;
    height: 500px;
}
#navbar{
    position: fixed;
    bottom: 0; left: 20px;
    width: 100%;
    background: #fff;
}
.nav li a{
    float: left;
    width: 80px;
    padding: 15px 0;
}
.nav li a:hover{
    color: #f33 !important;
    background: none;
}
.nav li.active a{
    color: #f55;
    text-decoration: underline;
}

2
répondu NullPoiиteя 2012-10-30 06:52:29

Merci Jerreck j'ai pu faire mes travaux avec l'aide de

height: 100%;

dans le corps sélecteur de mon CSS

Aussi, comme recommandé par les gars de Bootstrap http://getbootstrap.com/javascript/#scrollspy

j'ai ajouté position: relative; dans le corps aussi.

le début du sélecteur de corps dans mon CSS va comme ceci:

body {
    position: relative;
    height: 100%;
    /* … */
}

Dans le <body> en HTML j'ai dû supprimer

data-offset="0"

alors c'est maintenant comme ça

<body data-spy="scroll" data-target="#navigation">
2
répondu Daniel G Pare 2014-08-18 01:06:50

j'ai dû faire deux choses pour que scrollspy travaille pour moi.

<body> elément:

<style>

  .body
  {
    height: 100%;
  }

</style>    

<body data-spy="scroll" data-target="#scrollElement" data-offset="0">
penser c'est parce que scroll-spy essaye d'obtenir la hauteur de l'élément que vous espionnez, mais s'il n'y a pas de hauteur spécifiée pour votre élément, il passe un nul (ou 0?) valeur, qui semble casser les calculs du script.

deuxièmement, je devais m'assurer qu'il y en avait assez espace vertical entre mes éléments id (vers lesquels pointent les ancres nav).

Je n'ai pas pu calculer la quantité exacte d'espace nécessaire (il a varie en fonction de l'attribut data-offset, donc il a probablement quelque chose à voir avec cela), mais je pense que si vous avez une hauteur fixée à votre élément espion et scrollspy ne fonctionne toujours pas - il suffit d'ajouter plus de contenu entre vos éléments d'id.

1
répondu Jerreck 2014-07-18 01:15:21
$(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
        }, 1500, 'easeInOutExpo');
        event.preventDefault();
    });
});
0
répondu Manikandan Jyothimani 2016-06-23 12:14:27

j'ai fait comme ça. pour la cible de données j'utilise le nom de classe .barre de navigation

      <body data-spy="scroll" data-target=".navbar" data-offset="50">
       <nav class="navbar navbar-default navbar-fixed-top" >
0
répondu Ayush Chaurasia 2017-06-25 23:43:03
.nameClasse {
  position: relative;
  overflow: auto;
  height: 330px;
}

<div data-spy="scroll" data-target="#navbarVertical" data-offset="0" class="nameClass">
0
répondu expedito freitas 2018-05-27 03:34:35

après des heures de frustration et de recherche, j'ai découvert que beaucoup de gens n'étaient pas satisfaits de la documentation de Bootstrap Affix (www.mtjhax.wordpress.com). Après tous les regards, Cette solution sur Bootply a fonctionné pour moi:http://bootply.com/63937

si votre navigation avait l'id "navbar", le corps devrait ressembler à ceci:

<body data-spy="scroll" data-target="#navbar">
    ...
</body>

Et la barre de navigation en elle-même devrait être comme suit:

<div class="navbar" id="navbar">
    <ul class="nav navbar-nav">
        <li>...</li>
        <li>...</li>
        <li>...</li>
    </ul>               
</div>

Vous alors initialisé le plugin...

$('#nav').affix({
    offset: {top: 0}
}); 

... et de donner à la navigation bon style:

#nav.affix {
    position: fixed;
    top: 0;
    width: 100%
}
0
répondu radu.luchian 2018-09-06 16:47:48