Garder débordement div défiler vers le bas à moins que l'utilisateur fait défiler jusqu'
J'ai un div qui est à seulement 300 pixels gros et je veux à quand le chargement de la page faites défiler vers le bas de contenu. Cette div a du contenu dynamiquement ajoutés et doit rester défiler tout le chemin vers le bas. Maintenant, si l'utilisateur décide de défilement vers le haut je ne veux pas ça pour sauter vers le bas jusqu'à ce que l'utilisateur fait défiler tout le chemin vers le bas à nouveau
Est-il possible d'avoir un div qui va rester défile vers le bas, sauf si l'utilisateur défiler vers le haut et lorsque l'utilisateur fait défiler vers le bas il doit rester lui-même au fond, même lorsque de nouvelles dynamiques de contenu est ajouté. Comment pourrais-je aller au bout de la création de cette.
- utiliser les css position de haut de le maintenir au fond
{position : relative; bottom:0;}
. Supprimer la propriété css une fois que l'utilisateur a de défilement. - puisque vous n'avez pas accepter une réponse, je veux vous demander: avez-il travailler pour vous?
- Désolé, oui, cela a fonctionné. Je suis distrait et a dû courir mon chien chez le vétérinaire... par les temps je suis arrivé à la maison ce sentir à l'arrière de mon esprit. Encore une fois désolé et merci pour l'aide.
- Sonne comme une boîte de chat que vous voulez accomplir
Vous devez vous connecter pour publier un commentaire.
Ce qui pourrait vous aider:
[EDIT], pour le match de commentaire...
dès qu'un contenu est ajouté, à l'appel de la fonction updateScroll(), ou régler une minuterie:
si vous souhaitez mettre à jour UNIQUEMENT si l'utilisateur n'a pas bougé:
angular.element(document).ready(function () {
. Au sein de cette fonction, j'ai mis le scrolltop.setTimeout()
a fonctionné mieux quesetInterval()
pour moi.setInterval
pour ce léger problème.scrolled
pour de faux? peut-être ajouterif (scrollTop == scrollHeight) { scrolled = false; }
quelque part?J'ai juste mis en œuvre et peut-être vous pouvez utiliser mon approche.
Dire que nous avons le code HTML suivant:
Ensuite, nous pouvons vérifier si elle défile vers le bas avec:
scrollHeight vous donne de la hauteur de l'élément, y compris les non visible, en raison de débordement. clientHeight vous donne le CSS hauteur ou dit d'une autre manière, la hauteur réelle de l'élément. Les deux méthodes retourne la hauteur sans
margin
, de sorte que vous n'avez pas à vous inquiéter à ce sujet. scrollTop vous donne la position du défilement verticale. 0 est top et max est le scrollHeight de l'élément moins la hauteur d'élément lui-même. Lors de l'utilisation de la barre de défilement, il peut être difficile (c'était en Chrome pour moi) pour obtenir la barre de défilement vers le bas. j'ai donc jeté dans un 1px inexactitude. DoncisScrolledToBottom
sera vrai même si la barre de défilement est 1px par le bas. Vous pouvez définir ce à tout ce qui se sent le droit de vous.Alors c'est simplement une question de réglage de la scrollTop de l'élément vers le bas.
J'ai fait du violon pour vous montrer le concept: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDIT:
Ajout d'un extrait de code à préciser lors de la
isScrolledToBottom
esttrue
.Stick de barre de défilement vers le bas
JS:
CSS:
HTML:
if(!isScrolledToBottom)
: le test est anormal pour moi (et ne fonctionne pas dans mon code jusqu'à ce que j'ai corrigé).out.scrollHeight - out.clientHeight <= out.scrollTop + 1
. Êtes-vous à l'aide de rembourrage dans votre CSS?isScrolledToBottom
est vrai. C'est, si l'div défile vers le bas, puis sur garder défile vers le bas. Qu'est ce que la prochaine ligne de code ne. SiisScrolledToBottom
est fausse, alors on devrait ne rien faire, ce qui n'est évidemment pas nécessaire de préciser dans le code.document.getScrollingElement
comme suggéré ici: stackoverflow.com/questions/36227559/scrolltop-always-returns-0/...J'ai été en mesure de le faire fonctionner avec CSS.
L'astuce est d'utiliser
display: flex;
etflex-direction: column-reverse;
Le navigateur traite le fond comme à son sommet. En supposant que les navigateurs ciblés de soutien
flex-box
, le seul inconvénient est que le balisage doit être dans l'ordre inverse.Ici est un exemple. https://codepen.io/jimbol/pen/YVJzBg
overflow:auto; display:flex; flex-direction:column-reverse;
de l'emballage extérieur au lieu de l'emballage intérieur.Démo Live: http://jsfiddle.net/KGfG2/
Cela permettra de calculer la ScrollTop Position à partir de la hauteur de
#yourDivID
à l'aide de la$(document).height()
de la propriété, de sorte que même si les contenus dynamiques sont ajoutés à la div de la barre de défilement sera toujours à la position inférieure. Espérons que cette aide. Mais il a aussi un petit bug même si nous avons faites défiler vers le haut et laisse le pointeur de la souris à partir de la barre de défilement, il se mettra automatiquement à la position inférieure. Si quelqu'un pourrait corriger cela aussi, il sera agréable.Voici ma version basée sur dotnetCarpenter de réponse. Mon approche est un pur jQuery et j'ai nommé les variables pour rendre les choses un peu plus clair.. Ce qui se passe c'est que si le contenu de la hauteur est supérieure à l'conteneur de nous défiler la distance supplémentaire vers le bas pour atteindre le résultat souhaité.
Fonctionne sous IE et chrome..
Jim Hall réponse est à préférer, car bien que ce ne sont pas faites défiler vers le bas lorsque vous êtes défiler vers le haut, c'est aussi de la pure CSS.
Très bien mais, malheureusement, ce n'est pas une solution stable: En chrome (peut-être due à l'1-px-problème décrit par dotnetCarpenter ci-dessus),
scrollTop
se comporte de façon inexacte par 1 pixel, même sans interaction de l'utilisateur (lors de l'élément à ajouter). Vous pouvez définirscrollTop = scrollHeight - clientHeight
, mais qui va garder la div en position quand un autre élément est ajouté, aka le "tenir au fond" fonctionnalité ne fonctionne plus.Donc, en résumé, l'ajout d'une petite quantité de Javascript (soupir) permettra de résoudre ce problème et répondre à tous les besoins:
Quelque chose comme https://codepen.io/anon/pen/pdrLEZ ce (par exemple Coo), et après l'ajout d'un élément à la liste, également les éléments suivants:
où 29 est la hauteur d'une ligne.
Ainsi, lorsque l'utilisateur fait défiler jusqu'à une demi-ligne (si c'est encore possible?), le Javascript va l'ignorer et faites défiler vers le bas. Mais je suppose que c'est neglectible. Et, il résout le Chrome 1 px truc.
CSS:
HTML:
Run code snippet
pour voir l'effet. (PS: SiRun code snippet
ne fonctionne pas, essayez ceci: https://jsfiddle.net/Yeshen/xm2yLksu/3/ )Comment cela fonctionne:
Défaut de débordement est de défilement de haut en bas.
transform: rotate(180deg)
pouvez faire défiler ou de la charge dynamique de bloc du bas vers le haut.https://blog.csdn.net/yeshennet/article/details/88880252
Run code snippet
, voir directement l'effet.Voici une solution basée sur un post de blog de Ryan Chasse. Il dépend de la
overflow-anchor
propriété CSS, qui cloue la position de défilement à un élément au bas de l'défiler le contenu.JS:
CSS:
HTML:
Noter que
overflow-ancre
ne fonctionne actuellement pas dans Safari ou de Bord, de sorte que cette solution ne fonctionne actuellement pas dans tous les navigateurs.