Comment obtenir des données dynamiques-valeurs de décalage pour Bootstrap 3 apposer méthode
Je voudrais utiliser l'Affixe méthode décrite à l'Amorce de la documentation (http://getbootstrap.com/javascript/#affix), cependant la barre de navigation, je tiens à le fixer en haut de la page après il passe à il peut avoir différentes valeurs de décalage en fonction du contenu au-dessus d'elle.
Voici un exemple de la barre de navigation:
<div class="navbar navbar-default" data-spy="affix" data-offset-top="200">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link</a></li>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
</div>
Comme vous pouvez le voir, le data-offset-top
est actuellement fixé à 200. Cela fonctionne bien si le contenu ci-dessus est de 200px de hauteur, mais le contenu ci-dessus est dynamique et donc la taille au-dessus de cette barre de navigation n'est pas toujours le même. Comment puis-je faire la vale pour data-offset-top
être dynamique?
Je suppose que je vais devoir utiliser le javascript façon de le faire, mais je suis nit sûr.
- J'avais besoin d'un moyen de re-calculer la valeur sur la page de les redimensionner et aussi d'ajouter un espace de support de sorte que l'apposition de pistes lisses par exemple, pas de saut de page lorsque le contenu devient apposé. La solution -> stackoverflow.com/a/47429990/996010
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser jQuery pour obtenir le contenu dynamique de la hauteur au-dessus de la
navbar
. Par exemple:De travail de démonstration: http://bootply.com/69848
Dans certains cas, compenser.fond doit également être calculée pour déterminer le moment "de l'onu-affixe" de l'élément. Voici un exemple d'apposer-bas
J'ai été vraiment frustré par la façon dont cela fonctionne, à chaque fois de faire quelques personnalisé de calcul et de construction de l'offset au large de la hauteur avec les éléments ci-dessus souhaité apposer.
Voici apposer à son meilleur.
La normale de bootstrap apposer ne pas prendre les éléments naturels de décalage de la position supérieure en compte, vous devez passer manuellement en tant qu'attribut. Ce qui s'en occupe, et les comptes pour l'offset haut de modification de la fenêtre de redimensionnement.
J'ai aussi posté ceci sur l'examen du code.
N'oubliez pas d'ajouter le
data-smart-affix
attribut à votre apposer élémentEssayez cet exemple de code: https://jsfiddle.net/NabiKAZ/qyrauogw/
(Dans cet exemple, la hauteur de la section rouge peut être 100px ou 200px ou 300px dans la diffrence de la largeur de la fenêtre, Donc besoin de diffrence
data-offset-top
lorsque le défilement.)ThomasReggi de données-smart-apposer ne fonctionne pas pour moi dans certains cas particuliers (quand la taille du document, ou lorsque le apposée sur la colonne était trop haut). Mais il m'a donné une idée simple: Ajouter un élément vide avant de le apposé sur le contenu, et l'utiliser pour obtenir le décalage. Fonctionne bien lorsqu'il est redimensionné.
Pendant que j'y étais, j'ai également régler la largeur de l'élément, il est naturel que la largeur du parent d'origine. Voici ma solution:
Le code HTML qui va avec c'est:
ou
Le nécessaire CSS est:
Si vous souhaitez désactiver apposer (par exemple, lorsque la colonne de droite est empilé), puis utilisez le CSS:
à l'intérieur de la couverture médiatique de la requête.
GI
Je vous suggère d'ajouter un wrapper autour de apposé div - pour éviter le "défilement rapide" avec apposé barre de navigation. Thomas a enregistré une belle solution, mais il ne comprend pas colapsed espace après apposer et il ne fonctionne pas dans les 2.x bootstrap, version que je dois utiliser. J'ai donc décidé d'écrire complètement nouvelle de la mise en œuvre de l'apposer. Il n'a pas besoin de bootstrap, juste jquery. C'est ma première javascript, donc s'il vous plaît merci 🙂 mais peut-être que ça aidera quelqu'un. Il est toujours agréable d'avoir de solution sans bootstrap
Vous pouvez trouver exemple ici:
http://jsfiddle.net/3ss7fk92/
Skelly ci-dessus est droite et il n'y a pas de meilleure façon de le faire. La seule solution possible avec les "indigènes" bootstrap consiste à attacher les apposer options avec un appel JavaScript (comme mentionné ci-dessus dans https://stackoverflow.com/a/18702972/2546679).
Il est particulièrement pas possible d'utiliser le
data-offset
attribut pour obtenir le même effet (même si ce serait beaucoup plus pratique, et même si la documentation pour Apposer à http://getbootstrap.com/2.3.2/javascript.html#affix suscite l'espoir on pourrait le faire).On peut donc écrire
mais on est pas le droit d'écrire par exemple:
La raison en est que les attributs de données sont analysées à travers le JQuery
.data()
API qui permet seulement une pure JSON valeurs pour être analysé, voir https://api.jquery.com/data/.Thnx ThomasReggi pour avoir une idée. Mais peut-être plus correct d'écrire:
pour ceux comme moi qui avait besoin d'une valeur inférieure trop qui pourraient écrire analogiquement.
BTW aussi, je pense, de l'envelopper dans un décorateur basé sur setTimeout (un peu comme les anti-rebond).
J'ai eu beaucoup de mal avec cela plus tôt, et pour une raison que je ne pouvais pas obtenir toutes les solutions d'autres personnes avaient suggéré de travailler. Je suis relativement nouveau à la méthode Bootstrap et JQuery, j'étais donc probablement faire quelque chose de vilain, je n'étais pas à l'attraper. Peu importe, j'ai trouvé une solution qui fonctionne vraiment bien, même si elle n'est pas, à strictement parler, l'utilisation de l'apposer des fonctionnalités comme Bootstrap entend. J'ai gardé mon
#thisElement.affix {top: desiredFixedPosition;}
CSS intacte, mais se débarrasser de ladata-spy
etdata-offset-top
attributs de #thisElement de la balise HTML. J'ai ensuite codé en dur dans ce JQuery:Autant que je l'ai testé, cela fonctionne indépendamment de la façon dont beaucoup vous redimensionner la page ou faites défiler la page, et si vous faites preuve de créativité dans la façon dont vous l'appelez dans le
$(document).ready()
fonction vous pourriez même avoir le menu de rester dans la bonne position durant la hauteur des animations. Comme indiqué, ce n'est pas techniquement un entièrement "Bootstrap" approuvé solution, mais il s'intègre assez bien dans un Bootstrap site que cela devrait fonctionner pour certains 🙂