J'ai 20 éléments de liste à l'intérieur d'un div qui ne peuvent en afficher que 5 à la fois. Quelle est la bonne façon de faire défiler jusqu'à l'élément n ° 10, puis l'élément n ° 20? Je connais la hauteur de tous les objets.
Le scrollTo
plugin fait cela, mais sa source n'est pas super facile à comprendre sans vraiment y entrer. Je ne veux pas utiliser ce plugin.
Disons que j'ai une fonction qui prend 2 éléments $parentDiv
, $innerListItem
ni $innerListItem.offset().top
ne $innerListItem.positon().top
me donne le scrollTop correct pour $ parentDiv.
$("#container").scrollTo(target, duration, options)
. La cible est juste un#anchor
. Terminé.Réponses:
Le
$innerListItem.position().top
est en fait relatif au.scrollTop()
de son premier ancêtre positionné. Donc, la façon de calculer la$parentDiv.scrollTop()
valeur correcte est de commencer par s'assurer qu'elle$parentDiv
est positionnée. S'il n'a pas déjà d'expliciteposition
, utilisezposition: relative
. Les éléments$innerListItem
et tous ses ancêtres jusqu'à ne$parentDiv
doivent avoir aucune position explicite. Vous pouvez maintenant faire défiler jusqu'à$innerListItem
avec:la source
Ceci est mon propre plugin (positionnera l'élément en haut de la liste. Spécialement pour
overflow-y : auto
. Peut ne pas fonctionner avecoverflow-x
!):REMARQUE :
elem
est le sélecteur HTML d'un élément vers lequel défilera la page. Tout ce que soutenu par jQuery, comme:#myid
,div.myclass
,$(jquery object)
, [objet dom], etc.Si vous n'avez pas besoin de l'animer, utilisez:
Comment utiliser:
Remarque:
#innerItem
peut être n'importe où à l'intérieur#overflow_div
. Ce n'est pas vraiment un enfant direct.Testé dans Firefox (23) et Chrome (28).
Si vous souhaitez faire défiler toute la page, cochez cette question .
la source
elem
?? vous ne l'expliquez pas du tout.$(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem, $(this)).offset().top);
- salutations$(this).scrollTop() - $(this).offset().top + $(elem).offset().top - 10
.J'ai ajusté la réponse de Glenn Moss pour tenir compte du fait que la division de débordement pourrait ne pas être en haut de la page.
J'utilisais ceci sur une application google maps avec un modèle réactif. Avec une résolution> 800px, la liste se trouvait sur le côté gauche de la carte. Pour une résolution <800, la liste était sous la carte.
la source
Les réponses ci-dessus positionneront l'élément interne en haut de l'élément de débordement même s'il est visible à l'intérieur de l'élément de débordement. Je ne voulais pas cela, alors je l'ai modifié pour ne pas changer la position de défilement si l'élément est en vue.
la source
J'écris ces 2 fonctions pour me faciliter la vie:
Et utilisez-les:
la source
elem.offset().top
calcule à partir du haut de l'écran. Je veux que calculer à partir de l'élément parent. Comment je fais ça ?Après avoir joué avec pendant très longtemps, voici ce que j'ai trouvé:
et je l'appelle comme ça
la source