Je crée un chat en utilisant les requêtes ajax dans les rails et j'essaie de faire défiler un div vers le bas sans trop de chance.
J'emballe tout dans ce div:
#scroll {
height:400px;
overflow:scroll;
}
Existe-t-il un moyen de le faire défiler vers le bas par défaut en utilisant JS?
Existe-t-il un moyen de le faire défiler vers le bas après une demande ajax?
javascript
html
ajax
dMix
la source
la source
C'est beaucoup plus facile si vous utilisez jQuery scrollTop :
la source
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
Vous pouvez utiliser le code suivant:
Pour effectuer un défilement fluide avec JQuery:
Voir l' exemple sur JSFiddle
Voici pourquoi cela fonctionne:
Réf: scrollTop , scrollHeight , clientHeight
la source
en utilisant jQuery animate :
la source
Fonctionne à partir de jQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
la source
Méthode plus récente qui fonctionne sur tous les navigateurs actuels :
la source
défilement fluide avec Javascript:
document.getElementById('messages').scrollIntoView({ behavior: 'smooth', block: 'end' });
la source
Si vous ne voulez pas vous fier
scrollHeight
, le code suivant vous aide:la source
1E10
). Un plus petit nombre fonctionneEn utilisant jQuery, scrollTop est utilisé pour définir la position verticale de la barre de défilement pour un élément donné. il y a aussi un joli plugin jquery scrollTo utilisé pour faire défiler avec animation et différentes options ( démos )
si vous souhaitez utiliser la méthode d'animation de jQuery pour ajouter une animation lors du défilement, vérifiez l'extrait de code suivant:
la source
J'ai rencontré le même problème, mais avec une contrainte supplémentaire: je n'avais aucun contrôle sur le code qui ajoutait de nouveaux éléments au conteneur de défilement. Aucun des exemples que j'ai trouvés ici ne m'a permis de faire exactement cela. Voici la solution avec laquelle je me suis retrouvé.
Il utilise
Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ) ce qui le rend utilisable uniquement sur les navigateurs modernes (bien qu'il existe des polyfills)Donc, fondamentalement, le code fait exactement cela:
J'ai fait un violon pour démontrer le concept: https://jsfiddle.net/j17r4bnk/
la source
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
ce code, myId est une variable. Comment puis-je accéder à cet identifiant dans le script.Javascript ou jquery:
Css:
la source
J'ai trouvé cela vraiment utile, merci.
Pour les gens Angular 1.X:
Tout simplement parce que l'encapsulation des éléments jQuery par rapport aux éléments HTML DOM devient un peu déroutant avec angulaire.
Aussi pour une application de chat, j'ai trouvé que faire cette tâche après le chargement de vos chats était utile, vous pourriez également avoir besoin de gifler sur un court délai.
la source
petit addenda: défile uniquement si la dernière ligne est déjà visible. s'il défile un peu, laisse le contenu où il se trouve (attention: non testé avec différentes tailles de police. cela peut nécessiter quelques ajustements à l'intérieur de "> = comparaison"):
la source
Tout comme un extrait de bonus. J'utilise angulaire et essayais de faire défiler un fil de messages vers le bas lorsqu'un utilisateur a sélectionné différentes conversations avec les utilisateurs. Afin de vous assurer que le défilement fonctionne après que les nouvelles données ont été chargées dans le div avec la répétition ng pour les messages, enveloppez simplement l'extrait de défilement dans un délai d'attente.
Cela garantira que l'événement de défilement est déclenché après que les données ont été insérées dans le DOM.
la source
setTimeout(function() { ... }, n)
Vous pouvez également, à l'aide de jQuery, attacher une animation au
html,body
document via:$("html,body").animate({scrollTop:$("#div-id")[0].offsetTop}, 1000);
ce qui se traduira par un défilement fluide vers le haut de la div avec l'ID "div-id".
la source
Script Java:
document.getElementById('messages').scrollIntoView(false);
Fait défiler jusqu'à la dernière ligne du contenu présent.
la source
Cela vous permettra de faire défiler vers le bas en ce qui concerne la hauteur du document
la source
Une méthode très simple consiste à définir
scroll to
la hauteur du div.la source
Faites défiler jusqu'au dernier élément à l'intérieur de la div:
la source
Sur mon application Angular 6, je viens de faire ceci:
La fonction clearInterval (interval) arrêtera la minuterie pour permettre un défilement manuel en haut / en bas.
la source
Mon scénario: j'avais une liste de chaînes, dans laquelle je devais ajouter une chaîne donnée par un utilisateur et faire défiler jusqu'à la fin de la liste automatiquement. J'avais fixé la hauteur de l'affichage de la liste, après quoi elle devait déborder.
J'ai essayé la réponse de @Jeremy Ruten, cela a fonctionné, mais il défilait jusqu'au (n-1) e élément. Si quelqu'un rencontre ce type de problème, vous pouvez utiliser la
setTimeOut()
méthode de contournement. Vous devez modifier le code ci-dessous:Voici le lien StcakBlitz que j'ai créé qui montre le problème et sa solution: https://stackblitz.com/edit/angular-ivy-x9esw8
la source
Je sais que c'est une vieille question, mais aucune de ces solutions n'a fonctionné pour moi. J'ai fini par utiliser offset (). Top pour obtenir les résultats souhaités. Voici ce que j'ai utilisé pour faire défiler doucement l'écran jusqu'au dernier message de mon application de chat:
J'espère que ça aidera quelqu'un d'autre.
la source
Parfois, la plus simple est la meilleure solution: je ne sais pas si cela va aider, cela m'a aidé à faire défiler ce que je voulais aussi. Plus le "y =" est élevé, plus il défile vers le bas et bien sûr "0" signifie en haut, donc par exemple "1000" peut être en bas, ou "2000" ou "3000" et ainsi de suite, selon la durée de votre page est. Cela fonctionne généralement dans un bouton avec onclick ou onmouseover.
la source
Définissez la distance entre le haut de l'élément déroulant et la hauteur totale de l'élément.
la source
Vous pouvez utiliser la méthode HTML DOM scrollIntoView comme ceci:
la source
utilisation :
ou vérifiez défiler vers le bas:
la source
Si cela est fait pour faire défiler vers le bas de la fenêtre de discussion, procédez comme suit
L'idée de faire défiler jusqu'à un div particulier dans le chat était la suivante
1) Chaque div de chat comprenant une personne, une heure et un message est exécutée dans une boucle for avec la classe chatContentbox
2) querySelectorAll trouve tous ces tableaux. Cela pourrait être 400 nœuds (400 chats)
3) allez au dernier
4) scrollIntoView ()
la source
scrollIntoView
, donc pas besoin d'en ajouter encore une de plus.