2008-10-30 22 views
2

Je construis une page d'utilitaire pour une application web sur laquelle je travaille. J'ai un élément que je veux utiliser comme une sorte de "console".Faire un élément défilant rester "au fond" tout en ajoutant du contenu

Je reçois des entrées pour la console via des appels Ajax (en utilisant le Ajax.PeriodicalUpdater du prototype). Le problème que j'ai est que lorsque j'insère de nouvelles lignes au bas de la "console", la barre de défilement reste dans la position initiale (donc je vois toujours les lignes supérieures à moins que je défile manuellement vers le bas).

Comment faire en sorte que la barre de défilement reste automatiquement en bas? J'utilise un prototype pour quelques bibliothèques qui en ont besoin dans ce projet, donc je préférerais garder ce javascript si possible.

Tout comme une note, je l'ai déjà essayé ceci:

onComplete: function() { 
    $('console').scrollTop = $('console').scrollHeight; 
} 

Il presque œuvres, sauf qu'il est toujours « un pas en arrière », et je ne vois pas l'élément le plus récent.

Répondre

4
new Ajax.PeriodicalUpdater(container, url, { 
    onComplete: function() { 
     (function() { 
      container.scrollTop = container.scrollHeight; 
     }).defer(); 
    } 
}); 
+0

Merci, j'ai déjà essayé cette méthode, mais elle est toujours en retard. En d'autres termes, je ne peux toujours pas voir le contenu le plus récemment ajouté, jusqu'à ce que la prochaine chose soit ajoutée. –

+0

Voir modification. Cela fait-il une différence? – eyelidlessness

+0

Pour une raison quelconque, onComplete ne fonctionne pas du tout de cette façon. Cependant, cette nouvelle méthode fonctionne avec onSuccess. Merci! –

1

Heh, je construisait presque exactement la même chose (une console Ajax) et a eu des problèmes avec mon débordés div pas Scolling tout le chemin vers le bas.

Et Stack Overflow m'a aidé à le résoudre! J'espère que cela vous aide aussi!

Scrolling Overflowed DIVs with JavaScript

EDIT: Ma question utilisée jQuery, mais le problème est pas avec le cadre JS il est avec le CSS attributs que vous utilisez. Fondamentalement, vous devez obtenir Math.max (div.scrollHeight, div.clientHeight) car certains navigateurs sont un peu bogués avec ces attributs.

+0

Toujours eu le même problème qu'avant. Peut-être parce que j'utilise un prototype au lieu de jQuery. –

+0

@the edit: En fait, la chose est juste exécutée trop rapidement, c'est pourquoi différer le réparer. Les attributs css standard fonctionnent correctement dans IE7, FF3 et Chrome, une fois le différé ajouté. –

Questions connexes