Хорошо, что касается бита прокрутки, используя JQuery, вы можете использовать метод анимации для перемещения окна прокрутки.
Что касается вашей идеи добавлять только новые обновления ... было бы идеально. Вот несколько мест для начала.
Вам необходимо пересмотреть свой запрос и разметку на стороне сервера, чтобы отвечать только новыми сообщениями, сообщениями через определенное время / или возвращать JSON, чтобы вы могли фильтровать и отображать его на стороне клиента.
Если вы собираетесь добавлять только новые сообщения в DOM, было бы лучше, если бы ваш сервер отвечал только этой разметкой. В противном случае вам нужно будет проанализировать клиентскую часть HTML, чтобы получить только новый контент.
Что касается обновления с «добавлением» или «добавлением» нового контента в DOM, вы можете использовать методы append / prepend jQuery.
Метод load дает небольшое сокращение для "загрузить это содержимое и заменить содержимое x", если вы хотите придерживаться load , Вы можете сделать что-то вроде
$("#messages-list").append($("<div>").load('update.inc.php', {...}).html());
Это не особенно элегантно и, возможно, расточительно, но более чистое и, возможно, более явное решение будет
$.ajax({ type: "GET",
url: "update.inc.php",
success : function(messages)
{
$('#messages-list').append(messages);
}
});
Кроме того, ваш setInterval может быть Немного агрессивно, опрашивать ваш сервер каждую секунду, может быть грубо, с одним пользователем, возможно, и нет, но по мере роста количества сессий вы начнете бомбардировать не только ваш HTTP-сервер, но и ваш SQL сервер. 5, 10, даже 30-секундные интервалы подойдут.
Вы можете даже поиграть с задержкой опроса, динамически установив ее на 30 секунд, а затем после отправки сообщения пользователем уменьшите задержку до каждых 5 секунд, затем через 1 минуту бездействия снова установите значение 30 или даже 60 секунд ...