Автоматическая прокрутка Django, JS, HTML

122
08 февраля 2021, 13:30

Как добавить автоматическую прокрутку в чат ? Вот пример кода, который я думаю отвечает за показ сообщений и следовательно сюда куда-то можно воткнуть скрипт на скроллинг.

UPD: Теперь следующая проблема на скриншоте, это проблема в styles.css ?

<script> 
    var roomName = {{ room_name_json }}; 
    var username = {{ username }}; 
 
    var chatSocket = new ReconnectingWebSocket( 
        'ws://' + window.location.host + 
        '/ws/chat/' + roomName + '/'); 
 
    chatSocket.onopen = function(e) { 
      fetchMessages(); 
    } 
 
    chatSocket.onmessage = function(e) { 
        var data = JSON.parse(e.data); 
        if (data['command'] === 'messages') { 
          for (let i=0; i<data['messages'].length; i++) { 
            createMessage(data['messages'][i]); 
          } 
        } else if (data['command'] === 'new_message'){ 
          createMessage(data['message']); 
        } 
    }; 
 
    chatSocket.onclose = function(e) { 
        console.error('Chat socket closed unexpectedly'); 
    }; 
 
    document.querySelector('#chat-message-input').onkeyup = function(e) { 
        if (e.keyCode === 13) {  // enter, return 
            document.querySelector('#chat-message-submit').click(); 
        } 
    }; 
 
    document.querySelector('#chat-message-submit').onclick = function(e) { 
        var messageInputDom = document.getElementById('chat-message-input'); 
        var message = messageInputDom.value; 
        message += ' - {{ username|slice:"1:-1" }}' 
        chatSocket.send(JSON.stringify({ 
            'command': 'new_message', 
            'message': message, 
            'from': username 
        })); 
 
        messageInputDom.value = ''; 
    }; 
 
    function fetchMessages() { 
      chatSocket.send(JSON.stringify({'command': 'fetch_messages' })); 
    } 
 
    function createMessage(data) { 
      var author = data['author']; 
      var msgListTag = document.createElement('li'); 
      var imgTag = document.createElement('img'); 
      var pTag = document.createElement('p'); 
      pTag.textContent = data.content; 
      imgTag.src = 'http://emilcarlsson.se/assets/mikeross.png'; 
       
      if (author === username) { 
        msgListTag.className = 'sent'; 
      } else { 
        msgListTag.className = 'replies'; 
      } 
      msgListTag.appendChild(imgTag); 
      msgListTag.appendChild(pTag); 
      document.querySelector('#chat-log').appendChild(msgListTag); 
    } 
 
</script>
      <div class="message-input"> 
        <div class="wrap"> 
        <input id="chat-message-input" type="text" placeholder="Введите сообщение..." /> 
        <i class="fa fa-paperclip attachment" aria-hidden="true"></i> 
        <button id="chat-message-submit" class="submit"> 
          <i class="fa fa-paper-plane" aria-hidden="true"></i> 
        </button> 
        </div>

Answer 1

Можно использовать scrollIntoView.

Можно в самый конец функции createMessage написать:

setTimeout(()=>msgListTag.scrollIntoView(),100);

setTimeout необходим, потому что надо проскроллить к элементу, когда он отрисуется.

function createMessage(data) {
      var author = data['author'];
      var msgListTag = document.createElement('li');
      var imgTag = document.createElement('img');
      var pTag = document.createElement('p');
      pTag.textContent = data.content;
      imgTag.src = 'http://emilcarlsson.se/assets/mikeross.png';
      if (author === username) {
        msgListTag.className = 'sent';
      } else {
        msgListTag.className = 'replies';
      }
      msgListTag.appendChild(imgTag);
      msgListTag.appendChild(pTag);
      document.querySelector('#chat-log').appendChild(msgListTag);
      setTimeout(()=>msgListTag.scrollIntoView(),100);
    }
READ ALSO
не выводится html в Swift WebView

не выводится html в Swift WebView

Пишу приложение, возникла одна проблема в момент когда я открываю окно с WebView куда должен вывестись мой html приложение крашится Подскажитe,пожалуйста,...

104
Возможно ли сделать такое?

Возможно ли сделать такое?

есть попап с режимом работыК примеру на фотов видно что сегодня, работает с 10 00 до 22:00, и есть желтая полоска которая показывает прогресс дня,...

114
Скачивание видео с ВК

Скачивание видео с ВК

Есть видео полученное через VK API, например этоКак теперь по нажатию скачать его?

109
AES проблемы при расшифровки

AES проблемы при расшифровки

Алгоритм шифровки работает, а вот при расшифровки получаю сообщение:

170