2012-06-22 7 views
12

Mam div class = 'messages'. I dodać datę do tego div poprzez jQuery.append() Oto style:Autoscroll div z jQuery na dole po dodaniu

.messages { 
border: 1px solid #dddddd; 
padding:10px; 
height: 400px; 
overflow-x:visible; 
overflow-y: scroll; 
-webkit-border-radius: 5px; 
-moz-border-radius: 5px; 
border-radius: 5px; 
margin-bottom:10px; 
font-size:14px; 
} 

Dla AutoScroll używam taką funkcję:

receiveMessage = function (name, message, type) { 
    //adding new message 
    $("#messages").append('<strong>' + name + ": " + '</strong>' + message + '<br>'); 
    /autoscrolling to the bottom 
    $("#messages").animate({ 
     scrollTop: $("#messages").height() 
    }, 300); 
} 

O ~ 20 wiadomości przewijania normalnie, ale po nim "zawiesza się", nowe wiadomości nie są przewijane. Wersja Chrome 19.0.1084.56. Co robię źle? Dzięki!

+0

Czy możesz podać kod HTML lub jeszcze lepiej utworzyć Sprawdzenie testowe w [jsFiddle] (http://jsfiddle.net)? – AbstractChaos

+0

'# messages' i' .messages'- czy je pomieszałeś? – Andreas

Odpowiedz

8

Zmień

scrollTop: $("#messages").height() 

do

scrollTop: $("#messages").scrollHeight 
+11

faktycznie, teraz (zadziałało: $ ("# messages"). Animate ({"scrollTop": $ ("# messages") [0] .scrollHeight}, "fast"); próbowałem odpowiedzieć na własne pytanie, ale nie jest wyświetlane – f1nn

+0

@ f1nn Twoje rozwiązanie działa. Wypróbowałem twoją "zaakceptowaną odpowiedź", ale to nie działa. –

2

To rozwiązanie nie działa dla mnie, jednak nie następuje ...

$(document).ready(function(){ 
    $('#chat-scroll').animate({ 
    scrollTop: $('#chat-scroll').get(0).scrollHeight}, 2000); 
}); 
0

Spróbuj:

$(document).ready(function(){ 
    $('#chat-scroll').animate({scrollTop: $('#chat-scroll')[0].scrollHeight}, 2000); 
});