Le défilement de l'élément suivant
Je suis aux prises avec un jquery ou javascript problème.
Il a déjà obtenu ennuyeux qui me dit que je pourrait le penser trop compliqué sur celui-ci.
Donc mon balisage (simplyfied) ressemble à ceci:
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
Fondamentalement juste quelques conteneurs.
Chacun contient un contenu différent et un bouton.
Le Plan:
1) Après un clic sur un bouton, la fenêtre doit défiler vers le bas pour le conteneur suivant.
2) Le dernier bouton défile pour la première conteneur de nouveau. J'ai donc besoin d'un boucle.
3) Le numéros de de conteneurs peuvent changer d'une page à l'autre.
EDIT: 4) Les conteneurs ne peuvent pas toujours être directe, les frères et sœurs les uns des autres (voir le balisage ci-dessous)
Le Problème:
J'ai pu obtenir que cela fonctionne en donnant à chacun contenant un IDENTIFIANT unique comme une cible pour le défilement effet.
Le problème c'est qu'il est trop en désordre rapidement.
Ne puis-je pas juste en quelque sorte cible "l'objet suivant dans la classe: conteneur", puis faites défiler jusqu'à que?
Je ne suis pas sûr si js ou jquery est la bonne approche. Mes connaissances dans ces deux est quelque peu limitée.
Je serais vraiment reconnaissante pour les pousser dans la bonne direction.
EDIT: Les conteneurs peuvent pas toujours être directe, les frères et sœurs les uns des autres.
<div class="row">
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="row">
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
<div class="container">
My Content
<a href="#" class="button">scroll down</a>
</div>
</div>
OriginalL'auteur Arrowcatch | 2012-09-08
Vous devez vous connecter pour publier un commentaire.
Solution Simple:
Pour obtenir le prochain conteneur, essayez d'utiliser
next()
.Fondamentalement, la
<div>
conteneurs sont des frères et sœurs les uns des autres, afin de l'appelant.next()
sur un div conteneur qui va vous donner la prochaine.http://jsfiddle.net/Pm3cj/1/
Vous suffit d'utiliser
$(this)
pour obtenir le lien de l'objet,.parent()
pour obtenir le parent du lien, qui est le<div>
, puis.next()
pour obtenir le frère suivant (veuillez noter qu'il s'enroule automatiquement, de sorte que le bébé après la dernière<div>
est le première<div>!),
.offset()to get its position relative to the page,
.top` pour le faire par rapport à la bordure supérieure.Alors il suffit d'utiliser
$(document).scrollTop()
pour faire défiler jusqu'à l'emplacement.Pour une solution générale, l'utilisation:
Le code utilise essentiellement
container.find('~.container, ~:has(.container)')
pour trouver toute la fratrie qui a ou est un.container
. Si rien n', puis remonter l'arborescence DOM 1 étape.Après il trouve quelque chose qui est ou a un
.container
, il l'attrape avecnextdiv = container.nextAll('.container, :has(.container)').first();
.Enfin, si rien n'est trouvé, vérifié par
nextdiv.length==0
, il suffit de prendre la première.container
dans l'ensemble de la page.Puis faites défiler jusqu'à ce que
.container
a été attrapé.http://jsfiddle.net/Pm3cj/3/
Pour animer le défilement, la place de la
scrollTop
propriété dans unanimate
fonction:http://jsfiddle.net/Pm3cj/4/
Ajouté solution générale (ajoute 3 états) - il est encore plus général que la structure que vous avez ajouté à votre solution, il fonctionnera avec n'importe quelle structure de la page!
Hey ronalch, Wow! Incroyable, je vous remercie pour votre aide. Je vais la mettre en œuvre demain, mais ressemble à son travail d'une manière ordonnée. Ce n'est qu'un peu déroutant si vous ne disposez pas d'un défilement de l'animation. J'ai pensé à utiliser .animate() pour cela, mais je ne sais pas où le mettre, sans perturber le fonctionnement de votre script. Est-ce possible? Merci une tonne! Très impressionnant!
suffit de modifier la ligne faisant le défilement, et de mettre la propriété en un
animate
fonction, comme indiqué ci-dessus.Salut ronalchn! Travaillé absolument parfait! Absolument impressionnant! Merci beaucoup!!! Oh, et j'ai vraiment aprécié le "//commentaires". M'a beaucoup aidé avec ma compréhension. Par curiosité: Combien de temps avez-vous à apprendre tout ça?
OriginalL'auteur ronalchn
JavaScript n'est pas nécessaire pour cela. Vous pouvez utiliser des ancres HTML.
OriginalL'auteur Rusty Jeans
Ce que vous voulez peut être facilement atteint grâce à
parent()
etchild()
.Si le nombre de conteneurs sur chaque page est différente, alors vous devriez commencer ID require (ne sais pas si c'est un terme) les récipients en série. Quelque chose comme,
class="container-1"
L'événement de clic sur le dernier bouton doit faire quelque chose comme:
Suis sûr que vous pouvez comprendre ce que le bouton suivant devrait le faire 😉
OriginalL'auteur automaticAllDramatic