2011-04-12 3 views
4

J'ai un problème avec un lien slidetoggle qui apparaît au bas de ma page. En effet Je veux que l'utilisateur clique pour afficher/cacher la div caché (qui fonctionne très bien)Jquery SlideToggle AND scroll

Le problème est la page ne défile pas vers le bas pour afficher le maintenant, pas caché div

En tant que novice JQuery , y a-t-il un moyen de basculer le div puis de le centrer sur la page? Ou au moins faire défiler vers le bas, sans que les choses deviennent trop compliquées?

Merci

Répondre

1

Pour exécuter cette fonction, je vous recommande d'utiliser un rappel de votre appel slideToggle pour régler le défilement du document à l'aide de la fonction scrollTop. Vous serez en mesure de déterminer la valeur du paramètre setTop en utilisant offset pour obtenir la position supérieure du conteneur basculé par rapport à la page. Je suggère de restreindre le comportement de défilement à seulement feu quand l'élément est montré, pas caché.

En général, le paramétrage direct de la page peut être un UX légèrement discordant. Pour cette raison, je vais vous donner du code qui anime scrollTop plutôt que de le définir directement à l'aide de la fonction scrollTop, mais cette approche n'est pas nécessaire car un appel direct à scrollTop positionnera également la page. Je pense juste en tant qu'utilisateur que je préférerais voir un défilement progressif plutôt qu'un changement de position soudain.

Le code, par exemple, prendrait la forme:

$(".myShowHideLink").click(function() { 
    $(".myToggleContainer").slideToggle("slow", function() { 
     if ($(this).is(":visible")) { 
      $(document).animate({ 
       scrollTop: $(this).offset().top 
      }, "slow") 
     } 
    }); 
}); 

Vous pouvez utiliser effectivement $(this).offset().top - 50 ou quelque chose de similaire Dirige tout le défilement à quelques pixels au-dessus du haut du récipient, mais est en place à toi. Je trouve que je n'aime pas que mes éléments butent contre la bordure supérieure de la fenêtre. Je m'excuse de ne pas avoir créé un cas de test pour cela car je tourne à partir de la hanche, mais si cela ne fonctionne pas comme annoncé, faites le moi savoir et je vais ajuster le code.

+0

Salut merci pour votre réponse, je ne pense pas que mon codage est encore à un point pour comprendre pleinement comment implémenter votre code, mais il ressemble à ce que j'essaye d'obtenir! Pour l'instant je suis en quelque sorte eu l'effet désiré avec les $ suivants (function() { \t \t \t $ ("# showMoreLink"). Click (function() { \t \t $ ("# moreText"). . slideToggle (800); \t \t $ ('html, body') animer ({scrollTop: 1290}, 1200); return false; \t \t \t \t}); \t \t Mais ce n'est pas idéal comme Lorsque vous essayez votre code, la page ne défile pas vers le bas, peut-être que je l'implémente mal? nks à nouveau \t}); – Andre

+0

Il vous manque un appel à offset pour obtenir le sommet de l'élément comme position de défilement. Essayez ce qui suit: '$ (document) .animate ({scrollTop: $ (" # moreText "). Offset(). Top}, 1200)'. – lsuarez

+1

En fait, cela ressemble à un appel animé à "corps" plutôt que de document pourrait fonctionner un peu mieux. [Voici une démo] (http://jsfiddle.net/lthibodeaux/pE9hu/) avec un léger changement pour que l'animation de défilement se fasse simultanément avec le slideToggle. – lsuarez