TL; DR: Est-ce que Sticky est réellement capable de réagir aux changements que je donne via JavaScript? Si c'est le cas, comment?
(Le projet utilise Foundation 6.2 et WordPress 4.4, thème installé à l'aide de Node.js / npm et gulp 4.0. Mes questions, en détail, sont indiquées en caractères gras.)
Je veux rendre la nav
barre collante en utilisant le plugin Sticky de Foundation, mais uniquement lorsque je clique sur un bouton. Cela signifie que lorsque le DOM est terminé, la nav
barre ne doit pas rester "seule", mais rester en position haute dans le document. De plus, il devrait disparaître lors du défilement vers le bas, mais rester en place lors du défilement vers le haut.
La nav
barre est correctement enveloppée dans tous les div
s requis , de sorte que la nav
barre est capable de coller. Les problèmes se posent avec la partie «supplémentaire». Mon idée était d'instancier Sticky en utilisant d'abord PHP:
<div data-sticky-container>
<header class="header" role="banner" id="sticky_header" data-sticky data-top-anchor="1"
data-btm-anchor="content:top" data-options="marginTop:0;" style="width:100%"
>
<?php get_template_part('parts/nav', 'offcanvas-topbar'); ?>
</header>
</div>
Après cela, changez la data-btm-anchor
position de défilement actuelle à l'aide de JavaScript qui est déclenché au clic. Cela n'a pas fonctionné aussi bien que je le souhaiterais. Ce que j'ai essayé jusqu'à présent:
- Lors de l'utilisation de
getElementByID
et ensuitesetAttribute
, ledata-btm-anchor
dans le fichier PHP change selon Firebug, mais cela n'influence pasnav
un peu la barre; il reste là où il est. Dois-je "réinstaurer" Sticky, et si oui, comment? - Les documents mentionnent:
La définition des options avec JavaScript implique de passer un objet dans la fonction constructeur, comme ceci:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
Cela signifie-t-il que je peux transmettre de nouveaux paramètres à une instance de plugin déjà existante? Chaque fois que je passais un nouvel Foundation.Sticky
objet avec rien de plus qu'un btmAnchor différent comme paramètre de mon tableau d'options à my jQuery('#sticky_header')
, rien ne se passait.
La documentation propose également d'ajouter par programme Sticky à mon "sticky_header". Si cela fonctionnait, je pourrais essayer de modifier directement l'objet jQuery. Jusqu'à présent, j'ai pu lier le plugin Sticky à mon en-tête avec succès en:
- lancer le .js à partir duquel le bouton obtient sa fonction
assets/js/scripts
(puis l'exécutergulp
) - suppression de toutes les balises collantes de données de my
<header class="header">
, donc il n'y a pas de plug-in collant enregistré dans l'en-tête lorsque le DOM a terminé le chargement ajout par programme du plugin:
function button_fire(){ var options = { topAnchor:"1", btmAnchor:"footer:top", marginTop:"1" }; var stick = new Foundation.Sticky(jQuery('.header'), options); }
L'en-tête gagne maintenant la classe "sticky" selon Firebug. Mais cela ne fonctionne toujours pas - au contraire, il a des problèmes: «L'espace d'en-tête» est quelque peu réduit, donc il couvre légèrement le «contenu»
div
ci-dessous. Que savez-vous, l'en-tête ne colle pas. Est-ce un bug?Supposons que cela fonctionne "brillamment" maintenant, suis-je théoriquement capable de modifier les attributs en déréférençant
var stick
ou en utilisantjQuery('#sticky_header')
oujQuery('.header')
?- lancer le .js à partir duquel le bouton obtient sa fonction
Surtout, jQuery ne fonctionne pas comme il se doit. J'ai eu beaucoup de problèmes avec l'utilisation $
dans mes scripts, et je ne peux pas, par exemple, exécuter la destroy()
méthode de Sticky à cause de cela (si cela a fonctionné, j'ai peut-être détruit une instance de Sticky pour en créer une nouvelle avec l' btmAnchor
appareil sur une nouvelle position de défilement). Je vais ouvrir une autre question à ce sujet.
var $ = jQuery
jQuery(document).ready(function($){ //your code here with using $ or jQuery });
wp_enqueue_script( 'jquery' );
Toujours le même problème qu'avant, malheureusement. Ou ai-je mis jQuery en file d'attente incorrectement? JointsWP a-t-il ses propres bibliothèques jQuery?