2016-04-13 2 views
1

У меня есть окно комментариев, и я использую следующий JS, чтобы установить прокрутку вниз, и для нее прокрутка вниз при появлении нового сообщения.Прокрутите вниз донизу при отправке нового сообщения

window.setInterval(function() { 
    var elem = document.getElementById('Commentbox'); 
    elem.scrollTop = elem.scrollHeight; 
}, 500); 

Это вид работы, когда новое сообщение она прокручивается вниз, но когда я прокручиваю, чтобы посмотреть на старые сообщения, которые он прокручивает меня обратно. Есть ли способ предотвратить это?

+0

Почему вы используете интервал здесь? Интервал означает, что ваша функция будет работать каждые x мил секунд, в вашем случае она прокручивается каждые полсекунды. – MorKadosh

ответ

2

Я бы не использовал функцию интервалов для прокрутки вниз, заставляя вас прокручивать каждые 500 миллисов с вашей реализацией. Я думаю, что у вас есть функция, которая добавляет новые сообщения и вызываются на входящих сообщениях:

function addMessage() { 
    // here you add the new message to DOM 
    // ... 

    // then you can scroll down once to show the new messages 
    var elem = document.getElementById('Commentbox'); 
    elem.scrollTop = elem.scrollHeight; 
} 

Если вы разместите код, как вы добавляете новые сообщения, я могу помочь вам лучше.

+0

Спасибо, что это сработало, как шарм, все, что мне нужно сделать, это добавить две строки в конце функции отправки. – DN0300

+0

Огромный ответ, однако, этот человек спросил о конкретной проблеме, с которой они сталкиваются. Кроме того, они не опубликовали свой код. Поэтому я понятия не имею, что они подразумевают под функцией отправки. Я предполагаю, что это то, что stackoverflow означает, когда они говорят, как много кода, как вы можете. Потому что тогда я мог бы ссылаться на свой код на свой и, возможно, решить свою проблему :( –

+0

«Функция отправки» - это в этом случае функция, которая вызывается, когда должно отображаться новое сообщение (это может быть сообщение HTTP-обратного вызова или веб-рассылки callback ...). Я уверен, что у вас есть такая функция (возможно, с другим именем). – Sim

0

Установите интервал как переменную, а затем очистите интервал при завершении прокрутки, используя window.clearInterval().

var timer = window.setInterval(function() { 
    var elem = document.getElementById('Commentbox'); 
    elem.scrollTop = elem.scrollHeight; 
    window.clearInterval(timer); 
}, 500); 
+0

Спасибо! Я попробовал. Таким образом, с помощью вашего метода, на странице обновить окно прокрутки вниз, что идеально. Но когда я отправляю новое сообщение, мне приходится вручную прокручивать его. – DN0300

+0

Попробуйте использовать clearInterval после публикации нового сообщения и прокрутки вниз. – Wowsk

0

@Wowsk имеет хороший ответ, но ваш следующий вопрос звучит так, будто вы ищете небольшую разницу в функциональности. Я думаю, что это должно доставить тебя туда, но я еще не проверял его.

var lastScrollTop = 0; 
var elem = document.getElementById('Commentbox'); 

var timer = window.setInterval(function() { 
    elem.scrollTop = elem.scrollHeight; 
    lastScrollTop = elem.scrollTop 
}, 500); 

elem.addEventListener("scroll", function(){ 
    if(lastScrollTop < elem.scrollTop){ 
     window.clearInterval(timer); 
    } 
}, false); 

Я просто пошел вперед и проверил его, прежде чем отправлять, надеюсь, что это помогает - обратитесь к скрипке: https://jsfiddle.net/condorhauck/ak1L12pd/1/

1

Поскольку правильное решение не работает для меня, я сделал что-то вроде этого:

$('.your-div-class').scrollTop($('.your-div-class').height()*$('.your-div-class').height());

Как я пришел с идеей?

  1. Сначала я нашел высоту DIV я хочу автоматической прокрутки, написав в консоли браузера:

    console.log($('.your-div-class').height());.

  2. Тогда я нашел значение scrollTop:

    console.log($('.your-div-class').scrollTop());.

  3. Тогда я положил это в консоли:

    $('.your-div-class').scrollTop($('.your-div-class').height()*$('.your-div-class').height());,

    и выяснили, что это только берет меня на полпути вниз и понял,

    $('.your-div-class').scrollTop($('.your-div-class').height()*$('.your-div-class').height());

    бы меня прокручивается достаточно вниз.

Если это не работает для вас. Вы можете использовать: $('.your-div-class').scrollTop($('.your-div-class').height()*1000);. Это должно сработать для вас просто отлично.

Смежные вопросы