Automatically scroll down chat div

后端 未结 11 2252
时光取名叫无心
时光取名叫无心 2020-12-05 07:43

I have this code, to load chat

function getMessages(letter) {
  var div = $(\'#messages\');
  $.get(\'msg_show.php\', function (data) {
    div.html(data);
          


        
11条回答
  •  渐次进展
    2020-12-05 08:09

    Let's review a few useful concepts about scrolling first:

    • scrollHeight: total container size.
    • scrollTop: amount of scroll user has done.
    • clientHeight: amount of container a user sees.

    When should you scroll?

    • User has loaded messages for the first time.
    • New messages have arrived and you are at the bottom of the scroll (you don't want to force scroll when the user is scrolling up to read previous messages).

    Programmatically that is:

    if (firstTime) {
      container.scrollTop = container.scrollHeight;
      firstTime = false;
    } else if (container.scrollTop + container.clientHeight === container.scrollHeight) {
      container.scrollTop = container.scrollHeight;
    }
    

    Full chat simulator (with JavaScript):

    https://jsfiddle.net/apvtL9xa/

    const messages = document.getElementById('messages');
    
    function appendMessage() {
    	const message = document.getElementsByClassName('message')[0];
      const newMessage = message.cloneNode(true);
      messages.appendChild(newMessage);
    }
    
    function getMessages() {
    	// Prior to getting your messages.
      shouldScroll = messages.scrollTop + messages.clientHeight === messages.scrollHeight;
      /*
       * Get your messages, we'll just simulate it by appending a new one syncronously.
       */
      appendMessage();
      // After getting your messages.
      if (!shouldScroll) {
        scrollToBottom();
      }
    }
    
    function scrollToBottom() {
      messages.scrollTop = messages.scrollHeight;
    }
    
    scrollToBottom();
    
    setInterval(getMessages, 100);
    #messages {
      height: 200px;
      overflow-y: auto;
    }
    Hello world

提交回复
热议问题